快速排序
入门平均性能最优的通用排序算法,理解 pivot 分区是关键。
快速排序的核心思想是"分而治之":从数组里随便挑一个数(叫 pivot),把比它小的放左边,比它大的放右边,然后对左右两半分别重复这个过程。
想象你在给一队学生按身高排队:随便叫一个人出来站中间,比他矮的站左边,比他高的站右边。然后左边那队和右边那队各自再用同样的方法分开,直到每队只剩一个人。
动画中重点观察:pivot 选了谁、分区过程中元素如何被交换到正确的一侧、以及递归如何一层层展开。
// 自定义输入
速度 中
待机 ⌨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²)