2009年5月13日星期三

基数排序



基数排序是非比较排序算法,算法的时间复杂度是O(n). 相比于快速排序的O(nlgn),从表面上看具有不小的优势.但事实上可能有些出入,因为基数排序的n可能具有比较大的系数K.因此在具体的应用中,应首先对这个排序函数的效率进行评估.


基数排序的主要思路是,将所有待比较数值(注意,必须是正整数)统一为同样的数位长度,数位较短的数前面补零. 然后, 从最低位开始, 依次进行一次稳定排序(我们常用上一篇blog介绍的计数排序算法, 因为每个位可能的取值范围是固定的从0到9).这样从最低位排序一直到最高位排序完成以后, 数列就变成一个有序序列.


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


第一次排序(个位):


3 4 2


5 7 6


3 5 6


0 5 8


第二次排序(十位):


3 4 2


3 5 6


0 5 8


5 7 6


第三次排序(百位):


0 5 8


3 4 2


3 5 6


5 7 6


结果: 58 342 356 576


没有评论:

发表评论