// 基数排序 时间较快,但消耗空间也大,属于空间换时间
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
})
基数排序算法小记
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...