快速排序

入门

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

快速排序的核心思想是"分而治之":从数组里随便挑一个数(叫 pivot),把比它小的放左边,比它大的放右边,然后对左右两半分别重复这个过程。

想象你在给一队学生按身高排队:随便叫一个人出来站中间,比他矮的站左边,比他高的站右边。然后左边那队和右边那队各自再用同样的方法分开,直到每队只剩一个人。

动画中重点观察: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²)