【什么叫快速排序】快速排序(Quick Sort)是一种高效的排序算法,采用“分而治之”的策略,通过选择一个基准元素,将数组分为两部分,一部分比基准小,另一部分比基准大,然后递归地对这两部分进行排序。它由英国计算机科学家托尼·霍尔(Tony Hoare)于1960年提出。
一、快速排序的基本思想
快速排序的核心思想是分区和递归。具体步骤如下:
1. 选择基准:从数组中选择一个元素作为基准(pivot)。
2. 分区操作:将所有小于基准的元素移到其左边,大于基准的元素移到右边。
3. 递归排序:对左右两个子数组重复上述过程,直到子数组长度为1或0,此时视为已排序。
二、快速排序的特点
| 特点 | 描述 |
| 时间复杂度 | 平均 O(n log n),最坏 O(n²)(当每次选到极端值时) |
| 空间复杂度 | O(log n)(递归栈占用) |
| 稳定性 | 不稳定(相同元素可能交换位置) |
| 是否需要额外空间 | 原地排序(不需要额外存储空间) |
| 适用场景 | 数据量较大,且内存有限的情况 |
三、快速排序的实现方式(简要)
常见的实现方式有:
- Lomuto 分区法:以最后一个元素为基准,从左向右扫描,把比基准小的元素放到前面。
- Hoare 分区法:以中间元素为基准,双向扫描,交换左右两边的元素。
四、快速排序的优缺点
| 优点 | 缺点 |
| 排序速度快,效率高 | 最坏情况下性能差(如数据已有序) |
| 原地排序,节省内存 | 对随机数据表现最佳,对特定数据容易退化 |
| 实现简单,易于理解 | 需要合理选择基准以避免最坏情况 |
五、快速排序的应用
快速排序广泛应用于各种编程语言的标准库中,例如:
- C++ 的 `std::sort`
- Java 的 `Arrays.sort()`
- Python 的 `sorted()`(内部使用 Timsort,但快速排序是其基础之一)
六、总结
快速排序是一种基于分治策略的高效排序算法,适用于大多数实际应用场景。虽然在最坏情况下性能不佳,但通过合理选择基准(如随机选择或三数取中法),可以有效避免这一问题。它具有较高的执行效率和较低的空间占用,是实际应用中最常用的排序方法之一。
表格总结:
| 项目 | 内容 |
| 算法名称 | 快速排序(Quick Sort) |
| 核心思想 | 分治 + 递归 |
| 时间复杂度 | 平均 O(n log n),最坏 O(n²) |
| 空间复杂度 | O(log n) |
| 稳定性 | 不稳定 |
| 是否原地排序 | 是 |
| 适用场景 | 大数据量、内存有限 |
| 实现方式 | Lomuto、Hoare 等 |
| 优点 | 高效、节省内存 |
| 缺点 | 最坏情况下性能差 |


