数据结构学习笔记——基数排序和排序算法总结
Posted 晚风(●•σ )
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构学习笔记——基数排序和排序算法总结相关的知识,希望对你有一定的参考价值。
目录
一、排序思想
基数排序与前面的排序算法不一样,它不基于比较和移动元素来进行排序,而是基于多关键字排序的思想,将一个逻辑关键字分为多个关键字,它是基于关键字各位的大小进行排序的。基数排序有两种实现方式:最高位优先法
和最低位优先法
,分别是按关键字高次位排序和低次位排序。
例如,下面通过最低位优先法,对给定的关键字序列110,119,007,911,114,120,122进行排序:
1、该序列的链式结构如下:
2、首先按照关键字的个位数字大小进行第一趟基数排序:
3、根据第一趟的顺序,按照关键字的十位数字大小进行第二趟基数排序:
4、根据第二趟的顺序,按照关键字的百位数字大小进行第三趟基数排序:
即,通过最低位优先法,得到排好的序列为007,110,114,119,120,122,911。
二、算法分析
分析:
(1)基数排序适用于:
1、数据元素的关键字可以很容易地进行拆分成d组,且d较小;
2、每组关键字的取值范围不大,即r较小;
3、数据元素个数n较大。
(2)空间复杂度:每一趟基数排序需要辅助空间r个队列,每趟排序后会重复使用这些队列,基数排序的空间复杂度
为O( r )。
(3)时间复杂度:其时间复杂度与初始序列无关,基数排序需进行d趟分配和收集操作,一趟分配需要O(n)数量级,一趟收集需要O( r )数量级,即总排序的时间复杂度
为O(d(n+r))。
(4)稳定性:基数排序是一种稳定的排序算法。
(5)适用性:基数排序适用于链式存储。
(6)排序方式:基数排序与前面的归并排序一样,也是是一种外部排序
(Out-place)。
三、排序算法总结
常用排序算法如下,其中归并排序和基数排序是外部排序:
排序算法 | 空间复杂度 | 平均时间复杂度 | 最好时间复杂度 | 最坏时间复杂度 | 排序方式 | 稳定性 | 适用性 |
---|---|---|---|---|---|---|---|
直接插入排序 | O(1) | O(n2) | O(n) | O(n2) | 内部排序(In-place) | √ | 顺序存储和链式存储 |
折半插入排序 | O(1) | O(n2) | O(nlog2n) | O(n2) | 内部排序(In-place) | √ | 顺序存储 |
希尔排序 | O(1) | 依赖于增量序列 | 依赖于增量序列 | 依赖于增量序列 | 内部排序(In-place) | × | 顺序存储 |
冒泡排序 | O(1) | O(n2) | O(n) | O(n2) | 内部排序(In-place) | √ | 顺序存储和链式存储 |
简单选择排序 | O(1) | O(n2) | O(n2) | O(n2) | 内部排序(In-place) | × | 顺序存储 |
续表:
排序算法 | 空间复杂度 | 平均时间复杂度 | 最好时间复杂度 | 最坏时间复杂度 | 排序方式 | 稳定性 | 适用性 |
---|---|---|---|---|---|---|---|
快速排序 | 最好为O(log2n);最坏为O(n);平均情况下,为O(log2n) | O(nlog2n) | O(nlog2n) | O(n2) | 内部排序(In-place) | × | 顺序存储 |
堆排序 | O(1) | O(nlog2n) | O(nlog2n) | O(nlog2n) | 内部排序(In-place) | × | 顺序存储 |
归并排序 | O(n) | O(nlog2n) | O(nlog2n) | O(nlog2n) | 外部排序(Out-place) | √ | 顺序存储和链式存储 |
基数排序 | O( r ) | O(d(n+r)) | O(d(n+r)) | O(d(n+r))) | 外部排序(Out-place) | √ | 链式存储 |
1、稳定性:直接/折半插入排序、冒泡排序、归并排序、基数排序是稳定
的排序算法;而简单选择排序、希尔排序、快速排序、堆排序是不稳定
的排序算法。
2、时间复杂度和空间复杂度:
(1)直接/折半插入排序、冒泡排序、简单选择排序是简单型
的排序算法,其时间复杂度
均为O(n2),空间复杂度
为O(1);
(2)堆排序、快速排序和归并排序是改进型
的排序算法,其时间复杂度
均为O(nlog2n),空间复杂度
分别为O(1) 、O(log2n)和O(n) ;
(3)希尔排序也称为缩小增量排序,它属于插入类算法,但在时间复杂度上有较大的改进,空间复杂度为O(1);
(4)一般来说,对于要排序元素较多的序列,可以选用时间复杂度为O(nlog2n)的堆排序、快速排序和归并排序算法;而对于排序元素较少的序列,可以选用时间复杂度为O(n2)的直接/折半插入排序、冒泡排序、简单选择排序算法。
以上是关于数据结构学习笔记——基数排序和排序算法总结的主要内容,如果未能解决你的问题,请参考以下文章