【问题标题】:Ordered merge problems有序合并问题
【发布时间】:2017-09-07 05:10:46
【问题描述】:

我的程序出了点小问题,我无法解决问题所在。基本上,有两个数组按升序排序,我必须将它们合并为一个。

我希望输出是:

1 2 3 4 5 6 7 8 9 10 11 12 13 14

但它是:

1 2 3 4 5 6 7 8 9 10 11 12 13 0

我做错了什么,输出中的最后一个值不是 14?我认为解决这个问题会很简单,但我想不通。

代码如下:

#include<iostream>
#include<cstdlib>
using namespace std;

int main(){

 int arrA[]={1,3,5,7,9,11,13};
 int arrB[]={2,4,6,8,10,12,14};
 int arrC[sizeof(arrA)/sizeof(int)+sizeof(arrB)/sizeof(int)];

 int sizeA=sizeof(arrA)/sizeof(int);
 int sizeB=sizeof(arrB)/sizeof(int);
 int sizeC=sizeof(arrC)/sizeof(int);

 for (int i=0;i<sizeA;){
    for (int j=0;j<sizeB;){
        if (arrA[i]<=arrB[j]){
            arrC[i+j]=arrA[i++];
        }
        else{
            arrC[i+j]=arrB[j++];
        }
    }
 }

for (int i=0; i<sizeC; i++){
    cout << arrC[i] << " ";
 }
 return 0;
}

【问题讨论】:

    标签: c++ arrays sorting merge


    【解决方案1】:

    实际上,您永远不会为最后 14 个元素的 arrC[13] 赋值。在外循环的最后一次迭代中 i==6 和内循环相同。所以当 i+j 等于 12 时结束。

    【讨论】:

    • 所以我必须更改循环。感谢您的帮助;)
    猜你喜欢
    • 2017-03-28
    • 2012-04-04
    • 2021-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多