AcWing 785. 快速排序
#include <iostream>
using namespace std;
const int N = 100010;
int n, a[N];
void quicksort(int l, int r) {
// 递归边界条件
if (l >= r) return;
// 步骤 ① 中 C 方式确定分界点
int x = a[l + r >> 1];
// 步骤 ② 中 B 方式的 a 步
int i = l - 1, j = r + 1;
// 步骤 ② 中 B 方式下方的“注” 确定循环条件 i, j 相遇时划分完毕
while (i < j) {
// 步骤 ② 中 B 方式的 b 步
do i++; while (a[i] < x);
// 步骤 ② 中 B 方式的 c 步
do j--; while (a[j] > x);
// 步骤 ② 中 B 方式的 d 步
if (i < j) swap(a[i], a[j]);
}
// 递归处理左边区间
quicksort(l, j);
// 递归处理右边区间
quicksort(j + 1, r);
}
int main() {
cin >> n;
for (int i = 0; i < n; i++) cin >> a[i];
quicksort(0, n - 1);
for (int i = 0; i < n; i++) cout << a[i] << " ";
}
void qsort(int *q,int l,int r)
{
if(l>=r) return ;
int i=l-1,j=r+1,x=q[l+r >>1];
while(i<j)
{
while(q[++i]<x);
while(q[--j]>x);
if(i<j) swap(q[i],q[j]);
}
qsort(q,l,j);
qsort(q,j+1,r);
}