加载中...
计数排序是一种非比较型的整数排序算法,通过统计每个取值出现的次数并累加前缀和来确定元素位置。当键值范围不大时,它能达到线性时间复杂度,且可实现稳定排序,常作为基数排序的子过程。

| 类别 | 非比较排序 |
| 时间复杂度 | O(n+k) |
| 空间复杂度 | O(n+k) |
| 稳定性 | 稳定 |
| 典型用途 | 基数排序子过程 |
计数排序是一种不依赖元素间比较的整数排序算法。它统计待排序序列中每个不同取值出现的次数,再据此直接计算出每个元素在有序结果中的位置,当取值范围有限时能实现线性时间排序。
计数排序适用于键值为有限范围整数或可映射为整数的场景。它突破了比较排序至少需要对数线性时间的下界,因为它根本不做元素比较,而是利用取值本身作为索引直接定位。其代价是需要与键值范围成正比的额外空间。
计数排序适合对取值范围较小的整数、字符或分数进行排序,例如按年龄、成绩、字节值分桶。它最重要的用途是作为基数排序每一位的稳定子排序,支撑起对大整数或字符串的高效排序。在直方图统计等场景也常见其身影。
问:计数排序为什么能突破比较排序下界?答:比较排序下界只约束基于两两比较的算法;计数排序不比较元素,而是用取值当索引直接定位,属于另一类模型,故不受该下界限制。
问:计数排序什么时候不适用?答:当键值范围远大于元素个数时,计数数组会占用大量空间且效率下降,此时应改用比较排序或基数排序。

| 类别 | 非比较排序 |
| 时间复杂度 | O(n+k) |
| 空间复杂度 | O(n+k) |
| 稳定性 | 稳定 |
| 典型用途 | 基数排序子过程 |
登录 后参与讨论
暂无讨论,来发表第一条评论吧