算法描述
- 统计数组中每个值为 i 的元素出现的次数,存入统计数组 C 的第 i 项
- 依次将统计数组 C 中值 val 不为 0 的下标推入到结果数组,推入 val 次
动图演示

算法实现
/*** 计数排序* @param {number[]} arr 数组*/const countingSort = (arr) => {const count = []for (let i = 0; i < arr.length; i++) {if (!count[arr[i]]) count[arr[i]] = 0count[arr[i]] += 1}const result = []for (let i = 0; i < count.length; i++) {if (count[i]) {for (let j = 0; j < count[i]; j++) {result.push(i)}}}return result}
当输入 n 个 0~k 之间的整数时,时间复杂度为 o(n+k),空间复杂度为 o(n+k)。
