时间复杂度O(n+k)
最大值太大了不适用,因为要开辟很大的内存空间来排序
衍生出了桶排序
let arr = [1, 2, 3, 1, 2, 3, 5];
计数排序
(1)找出待排序的数组中最大元素和最小元素
(2)统计数组中每个值为i的元素出现的次数,存入数组C的第i项
(3)对所有的元素计数累加,生产一个新的数组
(4)循环数组的每一项,取出每一项
(5)他的下标是值,他的值是元素次数,从0依次放,
(6)每放一个元素就将数量减去1
countingSort(arr, 5)
function countingSort(arr, maxValue) {
let arr1 = new Array(maxValue + 1);
for (var i = 0; i < arr.length; i++) {
if (!arr1[arr[i]]) {
arr1[arr[i]] = 0
}
arr1[arr[i]]++
}
let init = 0;
let index = 0;
while (init < arr1.length) {
while (arr1[init]) {
arr[index++] = init;
arr1[init]--;
}
init++;
}
}