数据结构学习笔记——基数排序和排序算法总结

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)的直接/折半插入排序、冒泡排序、简单选择排序算法。

以上是关于数据结构学习笔记——基数排序和排序算法总结的主要内容,如果未能解决你的问题,请参考以下文章

数据结构学习笔记——基数排序和排序算法总结

十大经典排序算法总结(基数排序)

数据结构学习笔记(八大排序算法)整理与总结

数据结构学习笔记(八大排序算法)整理与总结

Java学习笔记之十一Java中常用的8大排序算法详解总结

学习数据结构笔记====>不同的排序算法(Sort Algorithm)[冒泡,选择,插入,快速,希尔,基数,归并]