l。。1 2021-02-01 16:07 采纳率: 0%
浏览 11

快速排序的双向扫描结果出错

int Partation2(int *a,int q,int r){
    int prior=a[q];
    int left=q+1;
    int right=r;
    while(left <= right){
    while((left <= right)&&a[left]<=prior)left++;
    while((left <= right)&&a[right]>prior)right--;
    if(left < right){
    int temp=a[left];
    a[left]=a[right];
    a[right]=temp;
    }
   }
   int temp=prior;
    prior=a[right];
    a[right]=temp;
    return right;    
}//Ë«ÏòɨÃè·¨ 

void QuickSort(int *a,int p,int r){
    if(p<r){
 
        int q=Partation2(a,p,r);
        QuickSort(a,p,q-1);
        QuickSort(a,q+1,r);
    } 
}

int main(){
    int a[5]={2,3,1,8,5};
    QuickSort(a,0,4);
    for(int i=0;i<5;i++){
        cout<<a[i]<<endl;
    }
}

求大神帮助看看,菜鸡有点头疼

  • 写回答

1条回答 默认 最新

  • 「已注销」 2023-06-24 04:01
    关注

    您好!您的快速排序代码中的双向扫描结果出错了。在Partation2函数中,最后交换prior和a[right]的值时,应该交换a[q]和a[right]的值。正确的代码应该是这样的:

    int Partation2(int *a,int q,int r){
        int prior=a[q];
        int left=q+1;
        int right=r;
        while(left <= right){
            while((left <= right)&&a[left]<=prior)left++;
            while((left <= right)&&a[right]>prior)right--;
            if(left < right){
                int temp=a[left];
                a[left]=a[right];
                a[right]=temp;
            }
        }
        int temp=a[q];
        a[q]=a[right];
        a[right]=temp;
        return right;    
    }
    
    评论

报告相同问题?

悬赏问题

  • ¥15 dify知识库创建问题
  • ¥15 如何用C#的chart画1000万个点不卡顿
  • ¥15 爬虫技术找到网上看过房源客户的电话
  • ¥20 代码:Python随机森林反演生物量数据处理问题
  • ¥50 微信野豹球杆小程序数据
  • ¥15 Linux系统的命令行窗口回车变成了换行,无法执行命令了
  • ¥15 vb6.0调用ImageMagick进行图片转换问题
  • ¥15 安卓组件化工程引入Arouter报错there's no route matched path[/login/LoginActivity,如何解决?
  • ¥50 如何进行点云姿态调整优化
  • ¥20 关于c++的问题 如何用qt完成