js基数排序
作者:互联网
**基数排序**
核心思想:
对排序数据进行个位、十位、百位...的拆分(类似于桶排序的分组),先对个位比较排序,排完后再对十位比较排序,直到比较的位数大于最大值时,返回结果。
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