2011年2月17日星期四

<转>线性时间排序算法:Radix Sort

基数排序(Radix Sort) 算法的基本思想是,在待排序列里,分别从低位到高位依次排序,这样最后整个序列就有序了。例如,序列329,57,657,839,436 排序过程是这样的:

3 2 9
0 5 7
6 5 7
8 3 9
4 3 6
     ^
=>
4 3 6
0 5 7
6 5 7
3 2 9
8 3 9
  ^
=>
2 9
3 6
3 9
5 7
5 7
^
=>
0 5 7
3 2 9
4 3 6
6 5 7
8 3 9

这样看似更麻烦了,本来只需要排一次的东西现在要排好几次了,其实,这个主要是为了减轻上面1所讲的技术排序的限制,例如,如果一个序列里的数的范围很大,是2^32或者2^64,那么这个序列就无法用计数排序(Counting Sort)了,但是,如果用基数排序,每一轮用一次计数排序,总得时间复杂度是m*O(n)=O(n)。我们还可以根据内存等条件的具体情况,可以每2位或者3位作为一个单位进行排序。
这个算法要注意的一点是:排序时必须从后往前排,并且各个数字必须对齐。

没有评论:

发表评论