6TLE,求助,我自己优化的快速排序

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

dkjsiogu @ 2022-10-12 17:09:02

#include <bits/stdc++.h>
using namespace std;
void dkj_sort (long long int*,int,int); 
long long int e,n;
int main()
{
    long long int i;
    cin>>n>>e;
    long long int a[n];
    for(i=0;i<n;i++)
    {
    cin>>a[i];
    }
    dkj_sort(a,0,n-1);
    /*for(i=0;i<n;i++)
    {
    cout<<a[i]<<" ";
    }*/
    return 0;
}
void dkj_sort(long long int array[],int begin,int end)
{
    if(begin>=end&&begin==e)
    {
    cout<<array[e];
    return;
    }
    if(begin>=end)
    {
        return;
    }
    int i=begin,f=end;
    while(i!=f)
    {
        while(array[f]>=array[begin]&&i!=f)
        {
        f--;
        }
        while(array[i]<array[begin]&&i!=f)
        {
        i++;
        }
        if(i !=f) 
        swap(array[f],array[i]);
    }
    swap(array[begin],array[i]);
    if(e<=i)
    dkj_sort(array,begin,i-1);
    else
    dkj_sort(array,i+1,end);

}

就是只排k出现的那一半

为什么甚至不如sort完输出a[e]


by zz_z2Spider @ 2022-10-12 17:57:01

这题快排完全可以,11ms跑挺快。


by Math_rad_round @ 2022-10-12 19:48:58

你的快排没有随机化,应该是被卡了吧,基准数不能直接选第一个,应该随机取一个


|