寻找第K大的数

题目描述
要求在N个不重复的整数中,找出第K大的整数 ,其中0<K<N<1000000
输入
输入第一行为两个正整数N K
第二行为N个整数,输入保证这N个整数两两相异,每个整数的范围在-1000000到1000000之间
输出
输出第K大的整数值
样例输入
5 3
3 2 4 5 1
样例输出
3

代码如下:

 1 #include<iostream>
 2 #include<math.h>
 3 #include<string.h>
 4 #include<stdio.h>
 5 using namespace std;
 6   
 7 int arr[1000000];
 8    
 9 int devide(int begin,int end)
10 {
11     int key=arr[begin];
12     int low=begin;
13     int high=end;
14     while(low<high)
15     {
16         while(low<high && arr[high]>=key)
17            high--;
18         arr[low]=arr[high];
19         while(low<high && arr[low]<=key)
20           low++;
21         arr[high]=arr[low];
22     }
23     arr[low]=key;
24     return low;
25 }
26    
27 int Find(int begin,int end,int k)
28 {
29     int index=devide(begin,end);
30     if(index==end-k+1)
31       return index;
32     else if(index<end-k+1)
33       return Find(index+1,end,k);
34     else if(index>end-k+1)
35       return Find(begin,index-1,index-(end-k+1));
36 //  return Find(begin,index,k-1);
37 }
38 
39 int main()
40 {
41     int n,k;
42     cin>>n>>k;
43     memset(arr,0,sizeof(arr));
44     for(int i=0;i<n;i++)
45       cin>>arr[i];
46     int index=Find(0,n,k);
47     cout<<arr[index]<<endl;
48 }
原文地址:https://www.cnblogs.com/baigg1995/p/4583394.html