合并两个有序数组(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
相关产品推荐
相关产品推荐

