提问者:小点点

按升序合并两个数组


我想把两个排序的数组按升序放到一个数组中,但我不知道我做错了什么。

它不会将它们按顺序排列,只是将两个阵列组合在一起。

int [] merged = new int[count1 + count2];
int merg1 = 0, merg2 = 0, index = 0;

while (merg1 < count1 && merg2 < count2) {
    if (ary1[merg1] <= ary2[merg2]) {
        merged[index++] = ary1[merg1++];
    }
    else {           
        merged[index++] = ary2[merg2++];
    }

    while (merg1 < count1) {
        merged[index++] = ary1[merg1++];
    }

    while (merg2 < count2) {
        merged[index++] = ary2[merg2++];
    }

    for (int i = 0; i < index; i++) {
        System.out.print(merged[i] + " ");
    }

共3个答案

匿名用户

最后两个while循环的作用是什么?你可能不需要它们。似乎您对前两个数字进行排序,然后while循环复制第一个数组,然后复制第二个数组,而不进行排序。

匿名用户

你能分享一下下面的结果吗?

arry1 = [1,2,6,7]
arry2 = [2,3,4,8]

我同意悖论,没有两个额外的while循环,上面的逻辑就足够了。前任:

while (merg1 < count1 && merg2 < count2) {
    if (ary1[merg1] <= ary2[merg2]) {
        merged[index++] = ary1[merg1++];
    }
    else {           
        merged[index++] = ary2[merg2++];
    }
}

匿名用户

错误不是来自于错误吗

while (merg1 < count1 && merg2 < count2) {
...
}

当其中一个数字超过其极限时,它终止。在while循环之后,我将添加另一个循环,将剩余数组的其余部分添加到合并数组中。