洛谷 P1177 快速排序

洛谷P1177 快速排序

img


#include<iostream>
#include<cstdlib>
#include<ctime>

using namespace std;

int num[100010],n;

int get_mid(int left,int right){
    int pivot=rand()%(right-left+1)+left;
    swap(num[pivot],num[left]);
    int temp=num[left];    
    while(left<right){
        while(left<right && num[left]<=temp) left++;
        swap(num[left],num[right]);
        while(left<right && num[right]>temp) right--;
        swap(num[left],num[right]);
    }
    num[left]=temp;
    return left;
}

void quick_sort(int left,int right){
    if(left<right){
        int pos=get_mid(left,right);
        quick_sort(left,pos-1);
        quick_sort(pos+1,right);
    }
}

int main(){
    srand((unsigned)time(NULL));
    cin>>n;
    for(int i=1;i<=n;i++) cin>>num[i];
    quick_sort(0,n);
    for(int i=1;i<=n;i++) cout<<num[i]<<' ';
}

/*
    8
    1 5 7 4 6 3 2 8
*/


http://js.xiazai163.com/down8/jingdiansaoleilsb_itmop.com.zip