60分求助(前两个数据超时,后三个数据过了,很疑惑为什么小数据搞不懂)
查看原帖
60分求助(前两个数据超时,后三个数据过了,很疑惑为什么小数据搞不懂)
654940
starlumia楼主2022/1/11 15:45
#include <iostream>
#include <stdio.h>

using namespace std;

int a[5000001],k,n;

void psort(int l, int r);

int main()
{
    cin>>n>>k;
    for(int i=0;i<n;i++){
        scanf("%d",&a[i]);
    }
    psort(0,n-1);
    return 0;
}


void psort(int l, int r)
{
    int i=r,j=l;//i为基准,j为扫描
    bool jgti=0;
    while(j!=i){
        if(jgti){
            while(a[j]>a[i]) j--;
            jgti=0;
        }
        else{
            while(a[j]<a[i]) j++;
            jgti=1;
        }
        swap(i,j);
        swap(a[i],a[j]);
    }
    if(i==k){
        cout<<a[i];
        exit(0);
    }
    if(i<k){//找右边
        psort(i+1,r);
    }
    else{
        psort(l,i-1);
    }
}

这是以右为基准的快排的优化,以左为基准的只能40分,然后看论坛里以中间数为基准的可以拿100,想请各位大佬看看问题,主要是两个大数据都可以400ms过但是头两个小数据超时了总觉得很奇怪。 image.png

2022/1/11 15:45
加载中...