基数排序算法小记

// 基数排序   时间较快,但消耗空间也大,属于空间换时间
    function sort ( params ) {
        let { data } = {... params}
        let getNum = params.getNum || function (v) { return v}
        let getMax = params.getMax || function (v, max) { return Math.max(v, max)}

        let max = -Infinity, len = data.length
        for(let i=0; i<len; i++) {
            max = getMax(data[i], max)
        }

        let basic = new Array(10), level = (max + '').length
        for(let i=0; i<level;i++) {
            for(let v of data) {
                let num = parseInt( getNum(v)/Math.pow(10, i)%10 )   // 取出当前数位上的值,放入对应的桶里

                if(!basic[num]) basic[num] = []
                basic[num].push(v)
            }

            let res = []
            for(let v of basic) {
                if(v && v.length) res = res.concat(v)
            }
            data = res
            basic = new Array(10)
        }

        console.log(data)
    }

    sort({
       // data:  [3220, 1, 10, 9680, 577, 9420, 7, 5622, 4793, 2030, 3138, 82, 2599, 743, 4127]
        data: [{num: 3220, title: '一'},  {num: 1, title: '二'},  {num: 10, title: '三'},  {num: 7, title: '四'} ],
        getNum: (v) => v.num,
        getMax: (v, max) => v.num > max ? v.num : max
    })
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容