#include <iostream>
#include <vector>
using namespace std;
int quickSortFindK(vector<int>& array,int start,int end,int k){
if(start>end){
return -1;
}
int first=start;
int last=end;
int key=array[first];
while(last>first){
while(last>first &&array[last]>=key){
last--;
}
array[first]=array[last];
while(last>first&&array[first]<=key){
first++;
}
array[last]=array[first];
}
array[first]=key;
//第k小的数的下标为k-1
if(first==k-1){
return array[first];
}else if(first>k-1){
return quickSortFindK(array,start,first-1,k);
}else{
return quickSortFindK(array,first+1,end,k);
}
}
int quickSort(vector<int>& array,int start,int end){
if(start>end){
return -1;
}
int first=start;
int last=end;
int key=array[first];
while(last>first){
while(last>first &&array[last]>=key){
last--;
}
array[first]=array[last];
while(last>first&&array[first]<=key){
first++;
}
array[last]=array[first];
}
array[first]=key;
quickSort(array,start,first-1);
quickSort(array,first+1,end);
}
using namespace std;
int main(){
vector<int> array{3,2,34,22,3,4,55,6,22,3,555,6};
auto array1=array;
//寻找第三小的数
int Ksmall=3;
cout<<quickSortFindK(array,0,array.size()-1,Ksmall)<<endl;
quickSort(array1,0,array.size()-1);
for(auto it=array1.begin();it!=array1.end();it++){
cout<<*it<<" ";
}
cout<<endl;
return 0;
}
【day-17】快排寻找第K小的数,简化版本
最新推荐文章于 2020-01-13 15:59:13 发布