《算法导论》学习之基数排序

        基数排序是一种非比较排序,其原理是将整数按位数切割成不同的数字,然后按每个位数分别比较。由于整数也可以表达字符串(比如名字或日期)和特定格式的浮点数,所以基数排序也不是只能使用于整数。

    基数排序的时间复杂度为O(n),但是不一定优于O(nlgn),因为基数排序的时间复杂度前面有个系数K,如果K比较大的话,那其时间复杂度将超过O(nlgn)

    其具体原理如下:先前数值按位进行拆分,然后从低位开始,根据最低位的值利用计数排序进行排序,一直到最高位。

比如这样一个数列排序: 342 58 576 356, 以下描述演示了具体的排序过程(红色字体表示正在排序的数位)

第一次排序(个位):

3 4 2

5 7 6

3 5 6

0 5 8

第二次排序(十位):

4 2

5 6

5 8

7 6

第三次排序(百位):

0 5 8

3 4 2

3 5 6

5 7 6

结果: 58 342 356 576

1、为什么要从最低位开始排序?

            如果要从高位排序, 那么次高位的排序会影响高位已经排好的大小关系. 在数学中, 数位越高,数位值对数的   大小的影响就越大.从低位开始排序,就是对这种影响的排序. 数位按照影响力从低到高的顺序排序, 数位影响力相     同则比较数位值.   

2、为什么同一数位的排序子程序要使用稳定排序?

稳定排序的意思是指, 待排序相同元素之间的相对前后关系,在各次排序中不会改变.比如实例中具有十位数字5的两个数字58和356, 在十位排序之前356在58之前,在十位排序之后, 356依然在58之前.

        稳定排序能保证,上一次的排序成果被保留,十位数的排序过程能保留个位数的排序成果,百位数的排序过程能保留十位数的排序成果.

参考内容:1、 算法总结系列之五:基数排序(Radix Sort)

           2、基数排序--维基百科

      

你可能感兴趣的:(算法导论学习)