洛谷P1177 快速排序
#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
*/