问题描述:
基数排序是一种非比较型整数排序算法,其原理是将整数按位数切割成不同的数字,然后按每个位数分别比较。由于整数也可以表达字符串(比如名字或日期)和特定格式的浮点数,所以基数排序也不是只能使用于整数。
步骤:
以整数为例,将整数按十进制位划分,从低位到高位执行以下过程。
1. 从个位开始,根据0~9的值将数据分到10个桶桶,例如12会划分到2号桶中。
2. 将0~9的10个桶中的数据顺序放回到数组中。
3. 重复上述过程,一直到最高位。上述方法称为LSD(Least significant digital),还可以从高位到低位,称为MSD。
var counter = [];
/**
* radix sort
* @param {Array} arr
* @param {number} maxDigit
* @return {Array}
*/
function radixSort(arr, maxDigit) {
var mod = 10;
var dev = 1;
for (var i = 0; i < maxDigit; i++, dev *= 10, mod *= 10) {
for (var j = 0; j < arr.length; j++) {
var bucket = parseInt((arr[j] % mod) / dev);
if (counter[bucket] == null) {
counter[bucket] = [];
}
console.log(counter)
counter[bucket].push(arr[j]);
}
var pos = 0;
for (var j = 0; j < counter.length; j++) {
var value = null;
if (counter[j] != null) {
while ((value = counter[j].shift()) != null) {
arr[pos++] = value;
}
}
}
}
return arr;
}
console.log(radixSort([1, 20, 33, 200, 23], 200));