当前课程知识点:数据结构 >  第9章 内部排序 >  9.7 基数排序 >  9.7 基数排序

返回《数据结构》慕课在线视频课程列表

9.7 基数排序在线视频

下一节:9.8 排序方法总结

返回《数据结构》慕课在线视频列表

9.7 基数排序课程教案、知识点、字幕

同学们,大家好

我是云南大学信息学院教师孔兵

这节课我们讨论基数排序

基数排序的思路是借助多关键字排序的思想

对单关键字进行排序的方法

我先介绍一下多关键字排序,看一个扑克牌的引例

假设要把一副扑克牌排成这样自小到大的次序

草花2草花3到草花a,方块2方块3到方块a

红桃2到红桃a,黑桃2到黑桃a

每张扑克牌上可以看作有两个关键字

一个关键字是花色,另外一个是面值

从上述次序观察,花色的地位大于面值

怎么对扑克牌做这样的排序呢?

有2种方法

第1种方法是按照花色把扑克牌分为4堆

随后在每堆的内部再按面值进行排序

达到要求的排序结果

这种方法称为最高位关键字优先

第2种方式是按照面值把扑克牌分为13堆

每堆中包含同面值的4张扑克牌,这步称为分配

随后呢,将这13堆按照面值自小到大叠在一起

这步称为收集;再按花色把扑克牌分配4堆

最后将这4堆牌按花色自小到大收集

收集后的扑克牌达到要求的排序结果

这种方法按照面值和花色进行了两趟分配和收集

完成排序,因为首先处理较低的关键字面值

这种方法称为最低位关键字优先

链式基数排序就是借助多关键字排序方法中

最低位关键字优先的方法对单关键字进行排序

排序的思路是

把单逻辑关键字看成由若干个关键字复合而成

借助“分配”和“收集”两种操作对单逻辑关键字进行排序

把单逻辑关键字看成由若干个关键字复合而成是怎么回事?

看一个例子,关键字为3位的十进制整数

如258,可以看成由百位的2

十位的5和个位的8三个只有1位的关键字复合而成

从数值的大小可知,这3个1位的关键字地位是不一样的

百位大于十位,十位大于个位,个位最低

基于这样的认识,我们可以借助多关键字排序的方法

利用3趟分配和收集

对3位十进制整数的关键字进行排序

分配和收集的过程需要对排序的记录多次移动和重组

我们采用链式结构存储待排序的记录

从最低关键字开始,每趟分配和收集处理1位关键字

首先按这位关键字的值分配到相应的堆

1位十进制数的值是0到9,总共有10堆

每堆中的记录组织成一个无头结点的单链表

为了指示这10个单链表,设计了两个指针数组f和e

每个数组有10个单元,f[0]指向0堆的首元结点

e[0]指向0堆的尾结点,其它单元的情况一样

初始时两个数组中的指针都置空

设计两个指针数组给分配和收集带来很大的便利

结合例子看一下分配和收集的过程

例子中有10个记录,存储在单链表中

情形如图1所示

第1趟按最低关键字个位进行分配和收集

从链表中依次取下每个结点

按个位数的值分配到对应的堆中

分配后的结果如图2所示

其中0,3,4,5,8,9堆中有记录,其他堆为空

从0堆开始,自小到大

把非空的链表依次串联收集起来

结果如图3所示。观察图3中的链表

我们注意到,记录的关键字按最低位有序

第2趟按次低关键字十位进行分配和收集

收集后可以看到,记录的关键字按十位和个位有序

第3趟按最高关键字百位进行分配和收集

收集后可以看到,记录按关键字有序

经3趟的分配和收集完成了整个序列的排序

看一下基数排序时间复杂度

假设每个记录含有d个关键字(例子中为3)

每个关键字的取值范围为rd(例子中是10)

每趟分配的时间复杂度为O(n)

每趟收集的时间复杂度为O(rd)

整个排序需要d趟分配和收集

所以,基数排序的时间复杂度为O(d(n+rd))

好同学们,基数排序我们就介绍到这儿

下次课再见

数据结构课程列表:

前言

-1.算法概念导入

--1.1 算法概念导入

-2.数据结构课程介绍

--2.数据结构课程介绍

-数据结构前言PPT

第0章 预备知识

-0.1变量、类型和表达式

--0.1变量、类型和表达式

-0.2 函数

--0.2 函数

-0.3 指针和单链表

--0.3 指针和单链表

-0.4 数组、指向函数的指针

--0.4 数组、指向函数的指针

-第0章 预备知识讨论题

-数据结构第0章预备知识PPT

第1章 绪论

-1.1什么是数据结构

--1.1什么是数据结构

--测试题

-1.2基本概念和术语

--1.2基本概念和术语

--测试题

-1.3数据结构的描述

--1.3数据结构的描述

--测试题

-1.4抽象数据类型的定义和实现

--1.4抽象数据类型的定义和实现

--测试题

-1.5算法和算法分析概念

--1.5算法和算法分析概念

--测试题

-1.6算法分析示例

--1.6算法分析示例

--测试题

-第1章 绪论讨论题

-数据结构第1章 绪论PPT

第2章 线性表

-2.1 线性表的类型定义

--2.1线性表的类型定义

--测试题

-2.2线性表的顺序表示和实现

--2.2 线性表的顺序表示和实现

--测试题

-2.3 线性链表

--2.3 线性链表

--测试题

-2.4 静态链表

--2.4 静态链表

--测试题

-2.5 循环链表和双向链表

--2.5 循环链表和双向链表

--测试题

-第2章 线性表讨论题

-数据结构第2章线性表PPT

第3章 栈和队列

-3.1 栈

--3.1栈

--测试题

-3.2 栈的实现

--3.2 栈的实现

--测试题

-3.3 栈的应用

--3.3 栈的应用

-3.4 栈与递归的实现

--3.4栈与递归的实现

--测试题

-3.5 队列和链队列

--3.5 队列和链队列

--测试题

-3.6 循环队列

--3.6 循环队列

--测试题

-第3章 栈和队列讨论题

-数据结构第3章栈和队列PPT

第4章 串

-4.1 串

--4.1 串

--测试题

-数据结构第4章 串PPT

第5章 数组

-5.1 数组定义和表示

--5.1 数组定义和表示

--测试题

-5.2矩阵的压缩存储

--5.2 矩阵的压缩存储

--测试题

-第5章 数组讨论题

-数据结构第5章数组PPT

第6章 树和二叉树

-6.1 树的定义和基本术语

--6.1 树的定义和基本术语

-6.2 二叉树和二叉树的性质

--6.2 二叉树和二叉树的性质

--测试题

-6.3 二叉树的存储结构

--6.3二叉树的存储结构

--测试题

-6.4 遍历二叉树

--6.4 遍历二叉树(1)

--6.4 遍历二叉树(2)

--测试题

-6.5 线索二叉树

--6.5 线索二叉树

--测试题

-6.6 树的存储

--6.6树的存储

-6.7 树的转换和遍历

--6.7 树的转换和遍历

--测试题

-6.8 赫夫曼树

--6.8 赫夫曼树

-6.9 赫夫曼编码

--6.9 赫夫曼编码

--测试题

-第6章 树和二叉树讨论题

-数据结构第6章树和二叉树PPT

第7章 图

-7.1 图的定义和术语

--7.1.1图的定义和术语(1)

--7.1.2图的定义和术语(2)

--测试题

-7.2 图的存储结构

--7.2.1 数组表示法(1)

--7.2.2 数组表示法(2)

--7.2.3 邻接表

--测试题

-7.3 图的遍历

--7.3.1 深度优先搜索

--7.3.2 广度优先搜索

--测试题

-7.4 最小生成树

--7.4.1 普里姆算法

--7.4.2 克鲁斯卡尔算法

--测试题

-7.5 有向无环图

--7.5.1 拓扑排序

--7.5.2 关键路径

--测试题

-7.6 最短路径

--7.6.1 单源最短路径-迪杰斯特拉算法

--7.6.2 每一对顶点之间的最短路径-弗洛伊德算法

--测试题

-第7章 图讨论题

-数据结构第7章图PPT

第8章 查找

-8.1 查找基本概念和顺序查找

--8.1 查找基本概念及顺序查找

--测试题

-8.2 有序表的查找

--8.2 有序表的查找

--测试题

-8.3 二叉排序树

--8.3.1 二叉排序树(1)

--8.3.2 二叉排序树(2)

--测试题

-8.4 平衡二叉树

--8.4 平衡二叉树

--测试题

-8.5 哈希表

--8.5.1 哈希表及哈希函数的构造

--8.5.2 解决冲突的方法

--8.5.3 哈希表的查找和性能分析

--测试题

-第8章 查找讨论题

-数据结构第8章查找PPT

第9章 内部排序

-9.1插入排序

--9.1.1 插入排序(1)

--9.1.2 插入排序(2)

--测试题

-9.2 希尔排序

--9.2 希尔排序

--测试题

-9.3 快速排序

--9.3 快速排序

--测试题

-9.4 选择排序

--9.4 选择排序

--测试题

-9.5 堆排序

--9.5 堆排序

--测试题

-9.6 归并排序

--9.6 归并排序

--测试题

-9.7 基数排序

--9.7 基数排序

--测试题

-9.8 排序方法总结

--9.8 排序方法总结

-第9章 内部排序讨论题

-数据结构第9章内部排序PPT

9.7 基数排序笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。