/**
* 基数排序
* 觉得这个排序算法很巧妙。
* 可以从低位到高位排,或者高位到低位排,下面是低位到高位
* 先排每个数个位数字[0-9],根据数字放到不同桶中
* 然后将桶连接,在按每个数十位数字[0-9]排
* 依次类推,根据列表中最大数字位数循环就行
* @param {*} arr
* @param {*} maxDigit
*/
function radixSort(arr, maxDigit) {
var mod = 10
var dev = 1
var count = []
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)
console.log(bucket, arr[j])
if (!count[bucket]) {
count[bucket] = []
}
count[bucket].push(arr[j])
}
var sortedIndex = 0
for (var x = 0; x < count.length; x++) {
// console.log(count[x])
if (count[x]) {
count[x].map(item => {
// console.log(item)
arr[sortedIndex++] = item
})
}
}
//清空之前的桶
count = []
}
console.log(arr)
}
radixSort(arr, 2)
网友评论