![](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]
~~~