AcWing 785. 快速排序
原题链接
简单
作者:
不霁之都
,
2024-02-05 20:22:10
,
所有人可见
,
阅读 25
#include <iostream>
#include <cstring>
#include <algorithm>
#include <time.h>
using namespace std;
const int N = 100000000 + 10;
int n,q[N];
void swap(int q[],int i,int j)
{
int t;
t = q[i];
q[i] = q[j];
q[j] = t;
}
void quick_sort(int q[], int l, int r)
{
if(l>=r) return;
int x = q[(l+r)/2];
int i = l - 1, j = r + 1;
while(i < j)
{
do i ++; while(q[i]<x);
do j --; while(q[j]>x);
if(i < j) swap(q,i,j);
}
quick_sort(q,l,j);
//例如 l = 0,j = 1, 经过一次变为 l = 0, j = 0, 此时如果 j = j + 1 ,则又为0,1,无限递归。所以第二次应为0,0
quick_sort(q,j+1,r);
第二次为 1,0,i>j 可以结束
}
int main()
{
scanf("%d",&n);
for(int i = 0;i < n ;i ++) scanf("%d",&q[i]);
quick_sort(q,0,n-1);
for(int i = 0;i < n ;i ++) printf("%d ",q[i]);
return 0;
}