【模板】快速排序

#include<bits/stdc++.h>
using namespace std;
const int N=3e5+5;
int n,a[N];
void qsort(int l, int r){
    if (l>=r) return;
    int i=l,j=r,tmp=rand()%(r-l+1)+l;
    swap(a[l],a[tmp]);
    int val=a[l];
    while (i<j){
        while (i<j && a[j]>val) j--;
        if (i<j) a[i++]=a[j]; else break;
        while (i<j && a[i]<val) i++;
        if (i<j) a[j--]=a[i]; else break;
    }
    a[i]=val;
    qsort(l,i-1);
    qsort(i+1,r);
}
int main(){
    srand(time(0));
    scanf("%d",&n);
    for (int i=1; i<=n; i++) scanf("%d",&a[i]);
    qsort(1,n);
    for (int i=1; i<=n; i++) printf("%d ",a[i]);
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/Alen-Walker/p/9777519.html