ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

js基数排序

2022-09-09 15:00:08  阅读:190  来源: 互联网

标签:... arr arrMin js 基数排序 let 排序 Math


**基数排序**
 核心思想:
  对排序数据进行个位、十位、百位...的拆分(类似于桶排序的分组),先对个位比较排序,排完后再对十位比较排序,直到比较的位数大于最大值时,返回结果。

let arr = [1,-8,6,-50,34,15,-12,42,48,30,11];
    let arrMin = Math.min(...arr);//获取当前数据最大值
    let arrMax = Math.max(...arr);//获取当前数据最小值
    let arr_=[];//每阶段比较后临时存储排序
    let remainder = 10;//取余
    let integer = 1;//取整
    for(let i = 0;i<arr.length;i++){//先对数据进行负数取正操作(方便后面进行比较排序)
        arr[i] = arr[i]-arrMin;
    }
    for(let j = 10;j<(arrMax-arrMin)*10;j*=10,remainder*=10,integer*=10){//判断阶段循环结束,即:数组最大数为80,那么位数判断一定为十位,不可能到百位
        for(let i = 0;i<arr.length;i++){//进行每一位的获取和比较
            let d = Math.floor(arr[i]/integer%remainder)//获得当前位的值
            if(arr_[d]==null) {//判断临时数组是否为空
                arr_[d] = [];
            }
            arr_[d].push(arr[i]);
        }
        let arrd=[];
        for(let p =0;p<arr_.length;p++){//每一轮位数比较参生的新数组赋值回原数组
            if(arr_[p]){
                arrd = [...arrd,...arr_[p]];
            }
        }
        arr=arrd;
        arr_=[];
    };
    let dataArr=[];
    arr.forEach(item=>dataArr.push(item+arrMin))//进行数组转回
    console.log(dataArr);

 

标签:...,arr,arrMin,js,基数排序,let,排序,Math
来源: https://www.cnblogs.com/lisir-blogshare/p/16672853.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有