为什么key用a[l]会超时而用a[(l+r)/2]不会
查看原帖
为什么key用a[l]会超时而用a[(l+r)/2]不会
285867
YANGRUIZHE楼主2022/11/6 00:14

如题,为什么key用a[l]会超时而用a[(l+r)/2]不会

#include<iostream>

using std::cin;
using std::cout;
using std::endl;

int a[100001];

void mySwap(int &a,int &b){
    int temp=a;
    a=b;
    b=temp;
}

void myQuickSort(int l,int r){
    if(l>=r) return;
    int i=l,j=r;
    int key=a[l];//用a[l]要吸氧才能过,但用a[(l+r)/2]能直接过
    while (i<=j)
    {
        while(a[i]<key) i++;
        while(a[j]>key) j--;
        if(i<=j){
            mySwap(a[i],a[j]);
            i++;
            j--;
        }
    }
    myQuickSort(l,j);
    myQuickSort(i,r);
}

int main(){
    int n;
    cin>>n;
    for(int i=1;i<=n;i++) cin>>a[i];
    myQuickSort(1,n);
    for(int i=1;i<=n;i++) cout<<a[i]<<" ";
    return 0;
}
2022/11/6 00:14
加载中...