桶式排序: 设置一个数组Count,大小为M,并初始化为零,于是Count有M个单元,开始时都是空的。当Ai被读入是Count[Ai]增加1,在所有的输入被读进纸盒,扫描数组Count,打印出排好序的表。该算法耗费O(M+N);
基数排序是桶式排序(bucket sort)的推广。基数排序就是多趟桶式排序;
算法步骤如下:
例子对0-999的一组数字排序:
第一趟基数排序后的桶:
0 | 1 | 512 | 343 | 64 | 125 | 216 | 27 | 8 | 729 |
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
第二趟基数排序后的桶
8 1 0 |
216 512 |
729 27 125 |
343 | 64 | |||||
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
最后一趟的基数排序为:
64 27 8 1 0 |
125 | 216 | 343 | 512 | 729 | ||||
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
然后将每个桶里的数顺序输出即为正确数列;
为了正确结果,该算法唯一可能出错的可能就是如果两个数出自同一个桶但顺序是错误的,不过此时各趟排序保证当几个数进入同一个通的时候,他们是以排序的顺序进入,可以保证得到正确的结果。
该排序所用的时间是O(P(N+B)),P为排序趟数,B为桶数,N为元素个数;