最后一个超时了,求大佬指教

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

CKAO @ 2021-11-28 08:53:44

#include<stdio.h>
int a[5000000];
void quick_sort(int a[],int l,int r)
{
    int x,i,j,t;
    x=a[(l+r)/2];i=l-1;j=r+1;
    if (l>=r)
        return;
    while (i<j)
    {
        do
        {
            i++;
        }while (a[i]<x);
        do
        {   
            j--;
        }while (a[j]>x);
        if (i<j)
        {
            t=a[i];a[i]=a[j];a[j]=t;
        }
    }
    quick_sort(a,l,j);
    quick_sort(a,j+1,r);
}
int main()
{
    int i,n,k,t;
    scanf("%d%d",&n,&k);
    for (i=0;i<n;i++)
        scanf("%d",&a[i]);
    quick_sort(a,0,n-1);
    printf("%d",a[k]);
    return 0;
}

by FFF团团员 @ 2021-11-29 20:31:56

@CKAO 如果第k大的数在左半部分区域就不用对右半部分再排序了


|