
優點:速度快
缺點:需要使用更多的額外空間來進行存儲,比如:如果是排序1~9之間的數字,那么只需要創建一個10個元素數組即可,但是如果要對1~1000000之間的數字進行排序,那么就要創建 1000000個元素的數組,而且還可能造成浪費,比如:對這個數組排序:1,4,1000000,4,63,4,為了容納需要創建擁有1000000個元素的數組,但這些數組中大多數元素是空的,所以浪費。

更好辦法:基數排序,可以用擁有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]
~~~