其他分享
首页 > 其他分享> > 计数排序

计数排序

作者:互联网

function countingSort(arr) {
    const countArr = [], resultArr = [];
    for (let i = 0, len = arr.length; i < len; i ++) {
        countArr[arr[i]] = countArr[arr[i]] ? countArr[arr[i]] + 1 : 1;
    }
    for (let i = 0, len = countArr.length; i < len; i ++) {
        countArr[i] = toNumber(countArr[i]) + toNumber(countArr[i - 1]);
    }
    for (let i = arr.length - 1; i >= 0; i--) {
        resultArr[countArr[arr[i]] - 1] = arr[i]; // 减1是因为js数组下标从0开始
        countArr[arr[i]] = countArr[arr[i]] - 1;
    }
    return resultArr;
}
function toNumber(obj) {
    return obj ? Number(obj) : 0;
}

浏览器测试

 

 

 原理解析

  以数组 arr = [3, 4,2,3] 为例

    结果:[0, 0, 2, 1, 2, 1];

      结果为 [0, 0, 1, 3, 4],小于等于0的个数为0,小于等于1的个数为0,小于等于2的个数为1。。。

  最终结果 [2, 3, 3, 4]

总结

  计算排序分为三步

标签:arr,下标,len,计数,countArr,resultArr,数组,排序
来源: https://www.cnblogs.com/tysonlee/p/12100825.html