一、简介
- 计数排序是一个 非 基于 比较交换位置 的排序算法
- 适用场景:知道数值范围的大体量排序, 比如高考分数排名
- 时间复杂度:O(n)
- 空间复杂度:O(n)
二、核心思想
- 从小到大的记录每个元素出现的次数
- 再把记录到的元素
push 到 新数组,记录了几次就push几次
三、排序过程图

四、代码实现
4.1 大致步骤:
- 确定数值范围,创建count数组,
count.length = max - min + 1,此数组用于统计待排序数组元素出现次数
- 将count数组中统计好的元素出现次数
push到一个新数组中,出现几次就push几次
4.2 具体代码:
const countSort = function(arr) {
// 最后返回的排序好的数组
const res = []
// 数值范围
const max = Math.max(...arr)
const min = Math.min(...arr)
// 统计待排序数组元素出现次数的数组,数组长度为max-min+1
const count = new Array(max - min + 1).fill(0)
// 遍历待排序数组,统计元素出现次数
for(let i = 0
count[arr[i] - min]++
}
// 将count数组中统计到的元素 push 到 res数组中, 元素出现几次就push几次
for (let i = 0
while(count[i] > 0) {
res.push(count[i] + min)
count[i]--
}
}
return res
}