随机快排,寻找第k大的数(当然包括中位数啦
注意随机数rand()需要#include<cstdlib>
qsort 的return条件有点小变化
#include<iostream>
#include<vector>
#include<cstdlib>//rand()
using namespace std;
int quicksort(vector<int>& t,int low,int high){
int ran=low+rand()%(high-low+1);//
swap(t[low],t[ran]);//
int pivot=t[low];
while(low<high){
while(pivot<=t[high]&&low<high) --high;
t[low]=t[high];
while(t[low]<=pivot&&low<high) ++low;
t[high]=t[low];
}
t[low]=pivot;
return low;
}
void qsort(vector<int>& t,int low,int high,int m){
if(low>high) return;//>=
int mid=quicksort(t,low,high);
if(mid==m){
cout<<t[mid];
return;
}
else if(mid<m){
qsort(t,mid+1,high,m);
}
else{
qsort(t,low,mid-1,m);
}
}
int main(){
int n,k;
cin>>n;
vector<int> arr;
for(int i=0;i<n;++i){
cin>>k;
arr.push_back(k);
}
qsort(arr,0,n-1,n/2);
return 0;
}