60分,前两个tle,求大佬帮助!!

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

jeamark_233 @ 2023-04-05 12:16:18

#include <bits/stdc++.h>
using namespace std;
int a[5000001],k,temp,num;
void qs(int i,int j)
{
    int left,right;
    left=i;
    right=j;
    if(i==j&&j==k&&i==k)
    {
        num=a[i];
        return;
    }
    int flag=(i+j)/2;
    num=a[flag];
    while(i!=j)
    {
        while(a[j]>num&&j>i)
        {
            j--;
        }
        while(a[i]<num&&i<j)
        {
            i++;
        }
        temp=a[i];
        a[i]=a[j];
        a[j]=temp;
    }
    if(i==k)
    {
        return;
    }
    else if(i<k)
    {
        qs(i+1,right);
    }
    else if(i>k)
    {
        qs(left,i-1);
    }
    return;
}
int main()
{
    int n;
    scanf("%d%d",&n,&k);
    k=k+1;
    for(int i=1;i<=n;i++)
    {
        scanf("%d",&a[i]);
    }
    qs(1,n);
    printf("%d",a[k]);
}

|