“边界之一:绕过模型不算违反下界。计数排序直接把键值当下标使用,时间 $O(n+k)$;基数排序按数位分配,时间 $O(d(n+k))$——对范围在 $[0,n^2)$ 内的整数取基数 $n$…”
形式陈述 ​
计数排序适用于每个键是区间
直觉
键域小时,与其比较元素,不如用值域索引为每个可能键开桶:先统计每个键出现次数,再把计数累加成连续输出区间。它把时间从
例子与边界
输入
输入
从右向左放置是为了让相同键的记录保持原顺序;若只排序键而不附带记录,则无须这一步稳定性保证。若
推论与应用
数组存储频数,前缀和把频数变成位置。计数排序是小整数键、直方图与离散事件聚合的基础,也是 LSD 基数排序保持稳定性的关键子过程。更一般的整数排序会在
参考资料
- Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, and Clifford Stein, Introduction to Algorithms, 4th ed., MIT Press, 2022,Parts I–VI。
- Donald E. Knuth, The Art of Computer Programming, Vol. 3: Sorting and Searching, 2nd ed., Addison-Wesley, 1998,Chs. 5–6。