基数排序(Radix Sort)
- 适用范围:将整数按位数切割成不同的数字,按每位分别比较。不只是适用整数,也适用于字符串和特定格式的浮点数等
- 最高位优先(MSD),最低位优先(LSD)
- 核心:(以整数为例)
- 基:被排序的元素的’个、十、百位’等
- 桶:“基”的每一位都有取值范围,一般数字是0-9共10中,10个桶
步骤:
1
2
3
4
5for(每一个基) {
// 循环内,以某一个’基‘为依据
遍历array,将元素放入对应的桶bucket
遍历桶bucket,将元素放回数据集
}补充:
- 稳定排序,时间复杂度可以认为是线性的O(n)
- 更准确点讲O(d(n+radix)),radix取值范围,d表示基个数
以下写法带排序数组有负数是有问题的,如果需要排序带负数的,需要设置偏移量offset,使得最小数为0
1 | function radixSort(arr, maxDigit) { |