计算排序在对大数进行排序时需要创建一个非常大的额外的数组来容纳这些数,所以非常浪费空间。
基数排序:无论多大的数进行排序,10个空格的数组即可。
![](https://img.kancloud.cn/66/90/6690b1054909755ffcca96feb7a4d3ec_1012x574.gif)
# JavaScript
如何取出一个数字的某一位置数字来:
取个位:parseInt(num % 10 / 1)
取十位:parseInt(num % 100 / 10)
取百位:parseInt(num % 1000 / 10)
...
~~~
// maxRadix :最大进制位数,比如:1024和30最大进制位置是4
function radixSort(arr, maxRadix) {
let buckets = [] // 桶
let mod = 10 // 取模时的数字
let dev = 1 // 除时的数字
let num // 取的每一位的数值
// 取个数、取十数、取百数 ...
for(let i=0; i<maxRadix; i++,mod*=10,dev*=1) {
// 循环数组中的每个数并取个/十/百位的数并放到桶中
for(let j=0;j<arr.length;j++) {
num = parseInt(arr[j] % mod / dev)
// 放到相应的桶中
if(buckets[num] == null) {
buckets[num] = []
}
buckets[num].push(arr[j])
}
// 依次从桶中取出数
let pos = 0 // 放在原数组的位置
let value
for(let i=0; i<buckets.length;i++) {
if(buckets[i]) {
while(value = buckets[i].shift()) {
arr[pos++] = value
}
}
}
}
}
~~~