You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

合并两个有序数组(sorted arrays)代码输出不符合预期的原因咨询

合并两个有序数组(sorted arrays)代码输出不符合预期的原因咨询

嗨,我来帮你定位问题所在啦~

你遇到的问题核心是merge函数没有处理其中一个数组遍历完后,另一个数组剩余的元素。

仔细看你的merge函数逻辑:你只写了一个while(i<n && j<m)的循环,这个循环只会在两个数组都还有未处理元素的时候运行。当其中一个数组的元素被全部遍历完(比如你的arr2只有3个元素,当j走到3时,j<m就不成立了),循环就直接终止了,但此时另一个数组(arr1)里的7和9还没被复制到arr3中,所以arr3后面的位置就保留了初始化的0,导致输出不符合预期。

要解决这个问题,你需要在第一个while循环结束后,分别加上两个循环来处理剩余的元素:

void merge(int arr1[], int n, int arr2[], int m, int arr3[]) {
    int i = 0, j = 0;
    int k = 0;

    // 处理两个数组都有元素的情况
    while( i<n && j<m) {
        if(arr1[i] < arr2[j]){
            arr3[k++] = arr1[i++];
        }
        else{
            arr3[k++] = arr2[j++];
        }
    }

    // 处理arr1中剩余的元素
    while(i < n) {
        arr3[k++] = arr1[i++];
    }

    // 处理arr2中剩余的元素
    while(j < m) {
        arr3[k++] = arr2[j++];
    }
}

这样修改后,当其中一个数组的元素先处理完,另一个数组剩下的所有元素都会被依次复制到arr3的末尾,就能得到你预期的输出1 2 3 4 5 6 7 9啦。

备注:内容来源于stack exchange,提问作者Shipranshi Keshri

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.23 07:53:12