sanammm @ 2022-10-29 23:13:26
#include<stdio.h>
int k;
void findkth(int a[],int l,int r)
{
if(l==r)
{
return;
}
int i=1,j=r,flag=a[(l+r)/2],tmp;
do{
while(a[i]<flag) i++;
while(a[j]>flag) j--;
if(i<=j)
{
tmp=a[i];a[i]=a[j];a[j]=tmp;
i++;j--;
}
}while(i<=j);
if(k<=j) findkth(a,l,j);//第k小数字在哪个区间
else if(i<=k) findkth(a,i,r);
else findkth(a,j+1,i-1);
}
int main()
{
int n,a[5000001];
scanf("%d %d",&n,&k)
;
for(int i=0;i<n;i++) scanf("%d",&a[i]);
findkth(a,0,n-1);
printf("%d",a[k]);
return 0;
}
还有40分超时了