刚开始学,注释为自己的理解,敬请指正。
// LSD Radix Sort
// 比较整型
var counter = [];
// 定义一个函数 arr待排序数组 maxDigit数组中最大数的位数,例如[1,10,100]的maxDigit为3
function radixSort(arr, maxDigit) {
var mod = 10;
var dev = 1;
for (var i = 0; i < maxDigit; i++, dev *= 10, mod *= 10) {
// 把待排序的数组 arr 中的每一位整数,插入对应的容器
for(var j = 0; j < arr.length; j++) {
// 从个位开始,得到数组中每个数的每一位并保存在 bucket 变量中
// bucket 变量的值可能为 0 1 2 3 4 5 6 7 8 9
// 与之对应的 counter[bucket] 容器为 0 1 2 3 4 5 6 7 8 9
var bucket = parseInt((arr[j] % mod) / dev);
// 如果目前 bucket 变量的值对应的 counter[bucket] 容器还不存在(未初始化),则创建(初始化)一个新的空容器
if(counter[bucket]==null) {
counter[bucket] = [];
}
// 现在把这个 bucket 变量的值插入对应的 counter[bucket] 容器的尾部
counter[bucket].push(arr[j]);
}
// 把 counter[bucket] 容器里的数依次取出
var pos = 0;
for(var j = 0; j < counter.length; j++) {
// 定义一个变量 value 用于保存conter[j].shift
var value = null;
if(counter[j]!=null) {
while ((value = counter[j].shift()) != null) {
arr[pos++] = value;
}
}
}
}
return arr;
}
console.log(radixSort([99,15,48,75,46,37,90,100],3));
/*
// 第一步
0 90 100
1
2
3
4
5 15 75
6 46
7 37
8 48
9 99
=> 90 100 15 75 46 37 48 99
// 第二步
0 100
1 15
2
3 37
4 46 48
5
6
7 75
8
9 90 99
=> 100 15 37 46 48 75 90 99
// 第三步
0 15 37 46 48 75 90 99
1 100
2
3
4
5
6
7
8
9
=> 15 37 46 48 75 90 99 100
*/
A coder on the way swpuLeo