【day-17】快排寻找第K小的数,简化版本

来源:互联网 发布:佛经诵读软件 编辑:程序博客网 时间:2024/05/29 07:44
#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;}