《算法导论》ʚ读书笔记&浅析ɞ 第八章 - 基数排序(包含js版代码实现)

什么是基数排序

如下图所示,我们对个位,十位,百位依次进行排列,然后就可以得到一个完整的排序过程

算法过程

  1. 因为每一个基数只可能是0-9所以可以对每一列进行计数排序
  2. 循环所有的列

算法实现

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

猜你喜欢

转载自blog.csdn.net/weixin_38616850/article/details/110926339
今日推荐