# 基数排序
- 时间复杂度(平均):
O(n * k)
- 时间复杂度(最坏):
O(n * k)
- 时间复杂度(最好):
O(n * k)
- 空间复杂度:
O(n + k)
- 稳定
由于整数可以表达字符串(名字或者时间)和特定格式的浮点数,所以基数排序也不一定只用于整数排序
# 算法
按位比较,第一次按个位由小到大排列;第二次按十位由小到大排列。。。以此类推
当第二次十位比较结果相同时,将按照第一次个位比较来判断两个数字的大小,因为将桶中数据按照先push先shift
的操作,所以排序是稳定的
// 第二个参数是数组中数据的最大位数
function radixSort(arr, maxDigit) {
let unit = 10,
base = 1;
const buckets = [];
for (let i = 0; i < maxDigit; i++, unit *= 10, base *= 10) {
for (let j = 0; j < arr.length; j++) {
let index = ~~((arr[j] % unit) / base);
if (!buckets[index]) {
buckets[index] = [];
}
buckets[index].push(arr[j]);
}
let arrIndex = 0;
for (let i = 0; i < buckets.length; i++) {
while (buckets[i] && buckets[i].length) {
arr[arrIndex++] = buckets[i].shift();
}
}
}
return arr;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22