P1177 【模板】快速排序

P1177 【模板】快速排序

快速排序模板

//P1177 【模板】快速排序
#include <bits/stdc++.h>
using namespace std;
int n,a[100010],t[100010];

void print(){
    for(int i=1;i<=n;i++){
        cout<<a[i]<<' ';
    }
    cout<<endl;
}

void qsort(int *a,int l,int r){
    if(r-l<=1) return ;//只有一个数或者是空序列 
    int flag=a[rand()%(r-l)+l]; //flag=a[l]
    int x=l,y=r;
    for(int i=l;i<r;i++){
        if(a[i]<flag){
            t[x]=a[i];
            x++;
        }
        else if(a[i]>flag){
            y--;
            t[y]=a[i];
        }
    }
    for(int i=x;i<y;i++){
        t[i]=flag;
    }
    for(int i=l;i<r;i++){
        a[i]=t[i];
    }
    qsort(a,l,x);
    qsort(a,y,r);
    return;
}


int main() {
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>a[i];
    } 
    qsort(a,1,n+1);//排序1到n个数 [1,N+1),左闭右开的区间 
    print();
    return 0;
}

 

posted @ 2023-02-14 15:40  关于42号星球  阅读(58)  评论(0)    收藏  举报