于两两比较的算法,算法的运行下界为Ω(nlogN),如果想再降低时间复杂度,只能通过其他的非基于比较的方法。基数排序就是一种方法,其时间复杂度为O(N)
基数排序的过程,假设有4个数,我们用链表把他们连一起,这4个数为
321 892 538 439
第一步:我们先创建10个链表,L0~L9,然后按4个数的个位的数字,依次接到相应链表的后面
L0
L1 321
L2 892
L3
L4
L5
L6
L7
L8 538
L9 439
第二步:按连接在链表从L0~L9的数字,我们依照先后顺序,重新生成一个新的链表
321 892 538 439
然后根据各个数的十位数,我们重新把他们连接到各个链表后面
L0
L1
L2 321
L3 538 439
L4
L5
L6
L7
L8
L9 892
第三步:按连接在链表从L0~L9的数字,我们依照先后顺序,重新生成一个新的链表321 538 439 892
然后根据各个数的百位数,我们重新把他们连接到各个链表后面
L0
L1
L2
L3 321
L4 439
L5 538
L6
L7
L8 892
L9
总结步:按连接在链表从L0~L9的数字,我们依照先后顺序,重新生成一个新的链表321 439 538 892
至此,排序结果完成
完整代码如下:
(使用单链表实现的)