社区讨论

O(nlogn)都过不了吗???为什么最后一个测试数据超时???

P1923【深基9.例4】求第 k 小的数参与者 8已保存回复 10

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
10 条
当前快照
1 份
快照标识符
@lo90umj4
此快照首次捕获于
2023/10/28 03:44
2 年前
此快照最后确认于
2023/10/28 03:44
2 年前
查看原帖
CPP
#include<iostream>
using namespace std;
void QuickSort(int a[],int k,int start,int end){
    //cout<<"start="<<start<<"  end="<<end<<endl;
    if(start>=end){
        return;
    }
    else{
        int base=a[(start+end)/2];
        int x=start,y=end;
        while(x<y){
            while(a[y]>base&&y>=x){
                y--;
            }
            while(a[x]<base&&y>=x){
                x++;
            }
            if(y>=x){
                swap(a[x],a[y]);
                y--,x++;
            }
        }
        if(a[x]<base){x++;}
        //cout<<"base="<<base<<"  a["<<k<<"]="<<a[k]<<endl;
        if(k==x){
            return;
        }
        else if(k<x){
            QuickSort(a,k,start,x-1);
        }else{
            QuickSort(a,k,x,end);
        }
    }
}

int main()
{
    int n,k;
    cin>>n>>k;//求n个数字中第k小的数
    int a[n];
    for(int i=0;i<n;i++){
        cin>>a[i];
    }
    QuickSort(a,k,0,n-1);
    cout<<a[k]<<endl;
    return 0;
}

回复

10 条回复,欢迎继续交流。

正在加载回复...