基数排序

基数排序

首先,什么是基数排序呢?

基本思想: 分配 + 收集
也叫桶排序或箱排序,设置若干个箱子,将关键字为k的记录放入第k个箱子,然后再按序号将非空的连接。
基数排序:数字是有范围的,均由0~9这十个数组组成,则只需设置十个箱子,相继按个、十、百…进行排序。

直接看图吧:

基数排序
第三趟排序我省略了,按百位排完之后就是从小到大的顺序了。

时间复杂度:

O(k *(m + n))

其中k是关键字个数,n为要排序的元素个数,m为桶的数量。比如上面的例子k=3,因为有个位,十位和百位需要排序,n=10,有10个数需要进行排序,m=10,因为数字都为0~9,所以我们需要10个桶。

基数排序的例子

例如:20000人按照生日进行排序
年、月、日3个关键字,限制范围是1920~2020, 1~12, 1~31
我们就可以年、月、日的顺序进行排序,每次排序用到的桶的数量都不同。