n_bluetea @ 2022-03-02 22:37:47
#include<stdio.h>
int box[5000000];
int k;
void quicksort(int start,int end)
{
int i,j;//哨兵
int midpoint;//基准点
int t;
midpoint=box[start];
i=start;
j=end;
if(start>end)
return ;
while(i!=j)
{
while(box[j]>=midpoint&&i<j)
{
j--;
}
while(box[i]<=midpoint&&i<j)
{
i++;
}
if(i<j)
{
t=box[i];
box[i]=box[j];
box[j]=t;
}
}
box[start]=box[i];
box[i]=midpoint;
//如果k位数字在i的左侧,那么我们只用对左边的数字排序,反之,则对右边
//如果k位数字刚好与i相同,说明k位数字已经归位,直接输出
if(i>k)
quicksort(start,i-1);//左边
else if(i<k)
quicksort(i+1,end);//右边
else
return ;
}
int main()
{
int n;
int k;
int i;
int start,end;//排序数字中的头和尾
scanf("%d %d",&n,&k);
for(i=0;i<n;i++)
{
scanf("%d",&box[i]);
}
start=0;
end=n-1;
quicksort(start,end);
printf("%d",box[k]);
return 0;
}