20170927_快排应用_数组中寻找第K大的数字

来源:互联网 发布:查看淘宝客佣金 编辑:程序博客网 时间:2024/05/16 14:17

20170927_快排应用_数组中寻找第K大的数字


在数组中寻找第K大的数:
例如,输入:4,5,1,6,2,7,3,8 这8个数字,
输出第1大的数:8
输出第3大的数:6


/*在数组中寻找第K大的数例如,输入:4,5,1,6,2,7,3,8 这8个数字,输出第1大的数:8输出第3大的数:6*/#include<iostream>#include<vector>#include<algorithm>#include<numeric>using namespace std;class Solution{public:void GetMinKthNumbers(vector<int> &input, int k){int n=input.size();if(k>n || n<=0 || k<=0){cout<<-1<<endl;return;}int start=0;int end=n-1;int index=partion(input,start,end);//返回的是第(index+1)小元素值while(index!=(n-k)){if(index>(n-k)){end=index-1;index=partion(input,start,end);}else{start=index+1;index=partion(input,start,end);}}cout<<input[index]<<endl;}public://快速排序的一次划分函数int partion(vector<int> &input, int start, int end){int n=input.size();if(n<1)return -1;int i=start;int j=end;while(i<j){while(i<j && input[i]<=input[j])--j;if(i<j){swap(input[i],input[j]);++i;}while(i<j && input[i]<=input[j])++i;if(i<j){swap(input[i],input[j]);--j;}}return i;}};int main(void){//int input[]={4,5,1,6,2,7,3,8};int ch=0;vector<int> input;while(cin>>ch)input.push_back(ch);int n=input.size();cin.clear();//换行,清除输入缓冲!!!int k=0;cin>>k;class Solution object;object.GetMinKthNumbers(input,k);system("pause");return 0;}


原创粉丝点击