“边界之一:绕过模型不算违反下界。计数排序直接把键值当下标使用,时间 $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,§8.2。
-
Donald E. Knuth, The Art of Computer Programming, Vol. 3: Sorting and Searching, 2nd ed., Addison-Wesley, 1998,Chs. 5–6。
-
Robert Sedgewick and Kevin Wayne, Algorithms, 4th ed. 配套课程,§5.1 Key-Indexed Counting Demo,展示频数、累计位置与稳定分配;其正序起点版本与本页逆序终点版本不同。