js计数排序

**计数排序**
核心思想:
  找到数组中的最大数和最小数来确定生成数组的大小,根据数组值找到到数组下标与值相同的位置+1,来标识当前值有几个,最后遍历当前数组。

let arr = [1,8,6,50,34,15,12,42,48,30,11];//数组
    let arrMin = Math.min(...arr);//获取最小值
    let arrMax = Math.max(...arr);//获取最大值
    let result=[];//结果存储
    let arr_ = new Array(arrMax-arrMin+1).fill(0);//根据最大值、最小值生成纯0数组(其中arrMax-arrMin+1是为了对数组中出现负数的情况进行的处理,如果数组中没有负数直接arrMax+1即可)
    for(let i = 0 ; i < arr.length ; i++){//遍历数组在值对应的下标对数值+1,我这里作差减去最小值也是为了处理负数情况
        arr_[arr[i]-arrMin]++;
    }
    for(let j = 0;j<arr_.length;j++){//遍历arr_下标数组来生成最终结果
        for(let k = arr_[j];k>0;k--){
            result.push(j+arrMin);
        }
    }
    console.log(result,"result");

 

posted @ 2022-09-07 14:46  奔跑的哈密瓜  阅读(30)  评论(0编辑  收藏  举报