#include<iostream>
#include<algorithm>
using namespace std;
const int N = 1e6 + 10;
int a[N], n;
/*
双指针思想
i 为左指针 r 为右指针
每次选左边第一个数或右边第一个数为判断值 也可以是数组中随机一个值
双指针操作 让数组左边全都 <= x 右边全都 >=x
递归重复排序
*/
void quick_sort(int* a, int l, int r)
{
if (l >= r)return;
int x = a[l + r >> 1], i = l - 1, j = r + 1;
while (i < j)
{
do i++; while (a[i] < x);
do j--; while (a[j] > x);
if (i < j)swap(a[i], a[j]);
}
quick_sort(a, l, j);
quick_sort(a, j + 1, r);
}
int main()
{
cin >> n;
for (int i = 0; i < n; i++)scanf("%d", &a[i]);
quick_sort(a, 0, n - 1);
for (int i = 0; i < n; i++)cout << a[i] << " ";
cout << endl;
return 0;
}
快速排序(模板)
最新推荐文章于 2022-04-13 10:11:22 发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)