什么是基数排序
如下图所示,我们对个位,十位,百位依次进行排列,然后就可以得到一个完整的排序过程
算法过程
- 因为每一个基数只可能是0-9所以可以对每一列进行
计数排序
- 循环所有的列
算法实现
function createZero(num, targetLength) {
let t = targetLength - num.toString().length
let str = ''
while (t > 0) {
t--;
str += '0'
}
return str + num.toString()
}
function RadixSort(arr) {
let len = arr.length
let max = Math.max.apply(null, arr)
const targetLength = max.toString().length
let strArr = arr.map(t => createZero(t,targetLength))
let map = {
}
for (let j = targetLength - 1; j >= 0; j--) {
for (let i = 0; i < len; i++) {
map[Number(strArr[i][j])] ? map[Number(strArr[i][j])].push(strArr[i]) : map[Number(strArr[i][j])] = [strArr[i]]
}
let temp = [];
for (let q = 0; q < 10; q++) {
temp = map[q] ? temp.concat(map[q]) : temp
}
map = []
strArr = temp
}
let result = strArr.map(s => Number(s))
return result
}
module.exports = RadixSort