快速排序

入门

平均性能最优的通用排序算法,理解 pivot 分区是关键。

用你自己的数组跑一遍

AlgoAnim · 快速排序
速度
待机
// 源代码
1int partition(int arr[], int lo, int hi) {
2    int pivot = arr[hi];
3    int i = lo - 1;
4    for (int j = lo; j < hi; j++) {
5        if (arr[j] <= pivot) {
6            i++;
7            swap(arr[i], arr[j]);
8        }
9    }
10    swap(arr[i + 1], arr[hi]);
11    return i + 1;
12}
13
14void quickSort(int arr[], int lo, int hi) {
15    if (lo >= hi) return;
16    int pivotIdx = partition(arr, lo, hi);
17    quickSort(arr, lo, pivotIdx - 1);
18    quickSort(arr, pivotIdx + 1, hi);
19}

复杂度分析

时间 O(n log n)
空间 O(log n)
最坏 O(n²)

算法讲解

快速排序选取一个基准元素 pivot,将数组分为小于等于 pivot 和大于 pivot 两部分。

分区完成后 pivot 已在最终位置,再递归处理左右子数组。

平均时间复杂度 O(n log n),但最坏情况(如极端不平衡分区)会退化到 O(n²)。

当前演示使用末尾元素作为 pivot,便于观察分区与递归过程。