前三个点玄学WA
查看原帖
前三个点玄学WA
111197
lqhsr楼主2021/9/12 16:33

将mid=(l+r)>>1改为mid=a[(l+r)>>1]并修改while中的mid就AC了

mid等于数组中间那个数和等于它的编号不是一回事吗

#include<iostream>
using namespace std;
int n,a[1000000];
void quick(int l,int r){
    if(l>=r)return ;
    int mid=((l+r)>>1),i=l,j=r;
    while(i<=j){
        while(a[i]<a[mid])++i;
        while(a[j]>a[mid])--j;
        if(i<=j){swap(a[i],a[j]);++i;--j;}
    }
    if(l<j)quick(l,j);
    if(i<r)quick(i,r);
}
int main(){
    cin>>n;
    for(int i=1;i<=n;i++)cin>>a[i];
    quick(1,n);
    for(int i=1;i<=n;i++)cout<<a[i]<<" ";
}
2021/9/12 16:33
加载中...