要求在N个不重复的整数中,找出第K大的整数 ,其中0<K<N<1000000
输入
输入第一行为两个正整数N K
第二行为N个整数,输入保证这N个整数两两相异,每个整数的范围在-1000000到1000000之间
输出
输出第K大的整数值
样例输入
5 3
3 2 4 5 1
样例输出
3
代码如下:
#include<iostream>
#include<math.h>
#include<string.h>
#include<stdio.h>
using namespace std;
int arr[1000000];
int devide(int begin,int end)
{
int key=arr[begin];
int low=begin;
int high=end;
while(low<high)
{
while(low<high && arr[high]>=key)
high--;
arr[low]=arr[high];
while(low<high && arr[low]<=key)
low++;
arr[high]=arr[low];
}
arr[low]=key;
return low;
}
int Find(int begin,int end,int k)
{
int index=devide(begin,end);
if(index==end-k+1)
return index;
else if(index<end-k+1)
return Find(index+1,end,k);
else if(index>end-k+1)
return Find(begin,index-1,index-(end-k+1));
// return Find(begin,index,k-1);
}
int main()
{
int n,k;
cin>>n>>k;
memset(arr,0,sizeof(arr));
for(int i=0;i<n;i++)
cin>>arr[i];
int index=Find(0,n,k);
cout<<arr[index]<<endl;
}