输入为2行,第一行是无序的包含不定个数的整数,第二行是一个整数K,代表要求的第K大的数
输出一个整数,代表数组中第K大的数
#include<iostream>
#include<vector>
#include<string>
#include<sstream>
using namespace std;
//依据快速排序,好理解
int kthLarge_own(int r[],int start,int end,int k)
{
int i = start;
int j = end;
int pivot = r[i];
while(i<j)
{
while(j>i && r[j]>=pivot)
--j;
r[i] = r[j];
while(i<j && r[i]<pivot)
++i;
r[j] = r[i];
}
r[i] = pivot;
if(i==(end+1-k))
return r[i];
else if(i < (end+1-k))
return kthLarge_own(r,i+1,end,k);
else
return kthLarge_own(r,start,i-1,k-(end+1-i));
}
int main()
{
vector<int> ivec;
int K;
string str, tmp;
vector<int> vec;
getline(cin, str);
stringstream input(str);
while(input>>tmp)
ivec.push_back(atoi(tmp.c_str()));
/*
int tmp;
cin>>tmp;
ivec.push_back(tmp);
char c;
while((c=getchar()) !='\n')
{
cin>>tmp;
ivec.push_back(tmp);
}
*/
cin>>K;
int size = ivec.size();
int* arr = new int[size]();
for(int i=0;i<size;++i)
arr[i] = ivec[i];
cout<<kthLarge_own(arr,0,size-1,K);
delete[] arr;
cout<<endl;
}