萌新求助!,全是wa

P1923 【深基9.例4】求第 k 小的数

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;
}

|