ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
![](https://img.kancloud.cn/3c/7d/3c7ddb59df2d21b287e42a7b908409cb_1012x557.gif) 优点:速度快 缺点:需要使用更多的额外空间来进行存储,比如:如果是排序1~9之间的数字,那么只需要创建一个10个元素数组即可,但是如果要对1~1000000之间的数字进行排序,那么就要创建 1000000个元素的数组,而且还可能造成浪费,比如:对这个数组排序:1,4,1000000,4,63,4,为了容纳需要创建拥有1000000个元素的数组,但这些数组中大多数元素是空的,所以浪费。 ![](https://img.kancloud.cn/5a/59/5a59e5e72c9fd17c94bd012a2874629a_860x490.png) 更好办法:基数排序,可以用拥有10个元素的数组排序更大范围的数字。 # JavaScript ~~~ function countSort(arr, maxValue) { // 构造数组 let tmpArr = new Array(maxValue+1) // 放到计数数组中 for(let i=0;i<arr.length;i++) { if(tmpArr[arr[i]]) { tmpArr[arr[i]]++ } else { tmpArr[arr[i]] = 1 } } // 依次放回原数组 let index = 0 for(let i=1;i<=tmpArr.length;i++) { while(tmpArr[i]>0) { arr[index++] = i tmpArr[i]-- } } } let abc = [3,1,2,5,6,4,7,9,9,5,4,2,4,7,9,5,6] countSort(abc, 9) console.log(abc) // [1, 2, 2, 3, 4, 4, 4,5, 5, 5, 6, 6, 7, 7,9, 9, 9] ~~~