#include<stdio.h>
#include<iostream>
using namespace std;
const int maxn = 500000 + 5;
// 找第K大的数
// m,n表示所需要排序部分的首尾索引
void findKthBigger(int a[], int K, int m,int n) {
int i=m,j=n;
int base = a[i];
while(i<j){
while(i<j && a[j]<base){
--j;
}
if(i<j)
a[i++] = a[j];
while(i<j && a[i]>=base){
++i;
}
if(i<j){
a[j--] = a[i];
}
}
a[i] = base;
if(K-1 > i){
findKthBigger(a,K,i+1,n);
}
if(K-1 < i){
findKthBigger(a,K,m,i-1);
}
else
return;
}
int main()
{
int m,n;
int a[maxn];
scanf("%d%d",&n,&m);
while(m || n)
{
for(int i = 0;i < n;i++)
scanf("%d",&a[i]);
findKthBigger(a,m,0,n - 1);
printf("%d\n",a[m - 1]);
scanf("%d%d",&n,&m);
}
return 0;
}
前k大数
最新推荐文章于 2023-10-20 13:25:53 发布