你看我像大猩猩不? 2022-12-29 10:45 采纳率: 89.5%
浏览 38
已结题

请问我这为啥会出错呢,输出全是0

请问我这为啥会出错呢,输出全是0,给的范围应该是对的1e6+10,不知道是不是int错了,改成long报的错更多了。


#include <iostream>
using namespace std;

const int N= 1e6+10;

int n;
int q[N];

void quick_sort(int q[],int l,int r) 
{
    if(l==r) return;
    int x=q[l],i=l-1,j=r+1;
    while(i<j)
    {
        do i++;while (q[i]<x);
        do j--;while (q[j]>x);
        
        if(i<j) swap(q[i],q[j]);
    }
    //递归处理左右两段 
    quick_sort(q,l,j);
    quick_sort(q,j+1,r);
}
int main()
{
    scanf("%d",&n);
    for(int i=0;i<n;i++) scanf("%d",&q[i]);
    quick_sort(q,0,n-1);
    for(int i=0;i<n;i++) printf("%d ", q[i]);
    return 0;
}

img

  • 写回答

3条回答 默认 最新

  • ShowMeAI 2022-12-29 12:55
    关注
    • 这个代码中,快速排序的终止条件是 if(l==r) return;,也就是如果左指针和右指针重合了,就直接退出函数。
    • 但是你的代码中的数组下标是从 0 开始的,所以当左指针和右指针都为 0 时,就会退出函数。
    • 因此,在调用递归函数的时候,就会发生终止条件,导致排序没有起到作用,结果输出全为 0。

    为了解决这个问题,你可以将终止条件修改为左指针大于等于右指针,这样就不会发生终止条件,递归函数就可以正常执行。修改后的代码如下:

    #include <iostream>
    using namespace std;
    
    const int N= 1e6+10;
    
    int n;
    int q[N];
    
    void quick_sort(int q[],int l,int r) 
    {
        if(l>=r) return; //修改终止条件
        int x=q[l],i=l-1,j=r+1;
        while(i<j)
        {
            do i++;while (q[i]<x);
            do j--;while (q[j]>x);
    
            if(i<j) swap(q[i],q[j]);
        }
        //递归处理左右两段 
        quick_sort(q,l,j);
        quick_sort(q,j+1,r);
    }
    int main()
    {
        scanf("%d",&n);
        for(int i=0;i<n;i++) scanf("%d",&q[i]);
        quick_sort(q,0,n-1);
        for(int i=0;i<n;i++) printf("%d ", q[i]);
        return 0;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 1月6日
  • 已采纳回答 12月29日
  • 创建了问题 12月29日

悬赏问题

  • ¥60 pb数据库修改或者求完整pb库存系统,需为pb自带数据库
  • ¥15 spss统计中二分类变量和有序变量的相关性分析可以用kendall相关分析吗?
  • ¥15 拟通过pc下指令到安卓系统,如果追求响应速度,尽可能无延迟,是不是用安卓模拟器会优于实体的安卓手机?如果是,可以快多少毫秒?
  • ¥20 神经网络Sequential name=sequential, built=False
  • ¥16 Qphython 用xlrd读取excel报错
  • ¥15 单片机学习顺序问题!!
  • ¥15 ikuai客户端多拨vpn,重启总是有个别重拨不上
  • ¥20 关于#anlogic#sdram#的问题,如何解决?(关键词-performance)
  • ¥15 相敏解调 matlab
  • ¥15 求lingo代码和思路