【考点 · 4级】快速排序(Quick Sort)— 基于分治思想的高效排序算法,属于排序算法类。
【说人话】核心就三步:① 选一个基准元素(pivot);② 把数组分成两半——比 pivot 小的放左边,大的放右边(这一步叫"分区"partition);③ 对左右两半递归调用。
l >= r 时要 return,否则无限递归导致栈溢出。另外 pivot 的选择也很关键——选首元素最简单,但如果数组已经有序会退化到 O(n²)。
标准快速排序(选首元素为 pivot,双指针分区):
std::sort 的底层实现之一!
#include <iostream>
using namespace std;
int partition(int arr[], int l, int r) {
int pivot = arr[l]; // 取首元素作基准
int i = l, j = r;
while (i < j) {
// ⬇️ 改成从右找比 pivot 小的(降序)
while (i < j && arr[j] >= pivot) j--;
while (i < j && arr[i] <= pivot) i++;
if (i < j) swap(arr[i], arr[j]);
}
swap(arr[l], arr[i]);
return i;
}
void quickSort(int arr[], int l, int r) {
if (l >= r) return;
int pos = partition(arr, l, r);
quickSort(arr, l, pos - 1);
quickSort(arr, pos + 1, r);
}
int main() {
int n, arr[100];
cin >> n;
for (int i = 0; i < n; i++) cin >> arr[i];
quickSort(arr, 0, n - 1);
for (int i = 0; i < n; i++) cout << arr[i] << " ";
return 0;
}
l >= r,不是 l > r。l == r 时只有一个元素,无需排序。i < j 的判断,防止越界。