基数排序的算法思想及性能分析

Posted 薛定谔的猫ovo

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基数排序的算法思想及性能分析相关的知识,希望对你有一定的参考价值。


基数排序

基数排序的基本思想

基数排序是一种很特别的排序方法,它不基于比较进行排序,而是采用多关键字排序思想(即基于关键字各位的大小及逆行排序),借助“分配”和“收集”两种操作对单逻辑关键字进行排序。

基数排序又分为最高位优先(MSD)排序最低位优先(LSD)排序

r r r为基数的最低位优先基数排序的过程

假设线性表由结点序列 a 0 , a 1 , . . . , a n − 1 a_0,a_1,...,a_n-1 a0,a1,...,an1 构成,每个结点 a i a_i ai 的关键字由 d d d 元组( k i d − 1 k^d-1_i kid1 k i d − 2 k^d-2_i kid2,… , k i 1 k^1_i ki1 k i 0 k^0_i ki0)组成,其中 0 ≤ k i j ≤ r − 1 ( 0 ≤ i < n , 0 ≤ j ≤ d − 1 ) 0≤k^j_i≤r-1(0≤i<n,0≤j≤d-1) 0kijr10in0jd1。在排序过程中,使用 r r r个队列 Q 0 Q_0 Q0 Q 1 Q_1 Q1,…, Q r − 1 Q_r-1 Qr1.
排序过程如下:
i = 0 , 1 , . . . , d − 1 i=0,1,...,d-1 i=0,1,...,d1,依次做一次“分配”和“收集”(其实是一次稳定的排序过程)。

  • 分配:开始时,把 Q 0 Q_0 Q0 Q 1 Q_1 Q1,…, Q r − 1 Q_r-1 Qr1各个队列置成空队列,然后依次考察线性表中的每个结点 a i ( i = 0 , 1 , . . . , n − 1 ) a_i(i=0,1,...,n-1) aii=0,1,...,n1,若 a i a_i ai 的关键字 k i j = k k^j_i=k kij=k,就把 a i a_i ai 放进队列 Q k Q_k Qk中。
  • 收集:把 Q 0 Q_0 Q0 Q 1 Q_1 Q1,…, Q r − 1 Q_r-1 Qr1各个队列中的结点依次首尾相接,得到新的结点序列,从而组成新的线性表。

基数排序示例:


基数排序的性能分析

空间复杂度

一趟排序需要的辅助空间为 r r r r r r个队列),但以后的排序中会重复使用这些队列,故基数排序的空间复杂度为 O ( r ) O(r) O(r)

时间复杂度

基数排序需要进行 d d d 趟分配和手机,一趟分配需要 O ( n ) O(n) O(n),一趟搜集需要 O ( r ) O(r) O(r),所以基数排序的时间复杂度为 O ( d ( n + r ) ) O(d(n+r)) O(d(n+r)),它与序列的初始状态无关。

稳定性

对于基数排序算法而言,很重要的一点就是按位排序必须是稳定的。因此,基数排序是一种稳定的排序方法

以上是关于基数排序的算法思想及性能分析的主要内容,如果未能解决你的问题,请参考以下文章

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

八大排序算法总结

基础排序算法总结(代码+图片分析)

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

排序算法——快速排序

重温基础算法内部排序之基数排序法