快速排序

概述

快速排序(Quicksort) 是由 C. A. R. Hoare 于 1960 年发明的一种基于 分治法 的排序算法。其期望时间复杂度为 ,最坏情况为 ,但在实际应用中通常比其他 排序算法更快。

定义

快速排序

快速排序采用分治策略,分为三个步骤:

  1. 分解(Divide):选择数组中的一个元素作为主元(pivot),通过 PARTITION 过程将数组 划分为两个(可能为空的)子数组 ,使得 中的每个元素 中的每个元素 位于最终排序位置。
  2. 解决(Conquer):递归地对 调用快速排序。
  3. 合并(Combine):无需合并,因为子数组已经就位。

期望时间复杂度 最坏时间复杂度

核心性质

PARTITION 过程

PARTITION 是快速排序的核心子程序。CLRS 采用 Lomuto 分区方案(末尾元素为主元),也有 Hoare 分区方案(双指针从两端向中间扫描)。

性能分析

  • 最好情况:每次划分将数组等分为两半,递归深度为 ,总时间
  • 最坏情况:每次划分极度不平衡(如已排序数组选末尾为主元),递归深度为 ,总时间
  • 期望情况:假设所有排列等概率出现,期望递归深度为 ,期望总时间

随机化快速排序

通过 RANDOMIZED-PARTITION 随机选择主元,使得算法的期望性能不依赖于输入分布,期望时间始终为

空间复杂度

  • 最好/平均情况:(递归栈深度)
  • 最坏情况:

不稳定性

快速排序是不稳定的排序算法,分区操作可能改变相等元素的相对顺序。

章节扩展

第7章:快速排序

快速排序是第7章的核心内容,涵盖了算法描述、性能分析、随机化版本和工程优化。

第7章:快速排序的分析

通过递归关系式和概率分析深入理解快速排序的期望性能。

参见