“数组与全序定义可比较输入,比较排序下界解释 $n\log n$ 障碍。归并排序给确定性最坏 $O(n\log n)$ 比较,随机选枢轴的快速排序通常报告期望 $O(n\log n)$,两种界…”
形式陈述 ​
快速排序是比较模型中的分治排序:选择枢轴,把数组原地划分为不大于与不小于枢轴的区域,再递归排序两侧。一次划分为
极端不平衡导致最坏
直觉
快速排序选择枢轴并原地分区,把枢轴放到最终相对位置,使较小元素位于一侧、较大元素位于另一侧,再递归处理两边。合并阶段几乎为空,效率取决于分区是否持续均衡;随机枢轴让任意固定输入上的期望分割良好,而不是保证每次恰好对半。它通常缓存友好且常数小,但标准实现不稳定。
例子与边界
总选首元素处理已排序数组会不断产生
对
Hoare 与 Lomuto 分区的返回语义不同,混用递归边界会死循环或漏元素。大量重复键时三路分区更稳健;“随机打乱”需使用足够均匀的随机源,不能只换一种确定输入顺序。
推论与应用
快速排序因原地分区、连续扫描和低常数常用于内存中的比较排序。工程实现常让很小的子数组转用插入排序,并用三数取中等办法改善普通输入上的枢轴质量;这些只调整常数和坏划分频率,不提供最坏界。随机枢轴给任意固定输入上的期望
若键是一字整数,超越比较的整数排序可利用数位与字操作,问题已不受快速排序的比较决策树约束。数据驻留外存时,外存排序以块传输为成本,快速排序的原地局部性不自动达到最优 I/O 界;应把比较数、RAM 时间、递归栈和 I/O 分别报告。
参考资料
- Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, and Clifford Stein, Introduction to Algorithms, 4th ed., MIT Press, 2022,Ch. 7, quicksort, randomized analysis, and partitioning。
- Donald E. Knuth, The Art of Computer Programming, Vol. 3: Sorting and Searching, 2nd ed., Addison-Wesley, 1998,Vol. 3, §5.2.2, sorting by exchanging。