如何获得正确答案合并 2 个排序数组?!C++

how to get correct answer merge 2 sorted arrays?! C++

本文关键字:数组 排序 C++ 何获得 答案 合并      更新时间:2023-10-16

我为Marge编写了一个小算法来排序数组。 但我对此有问题。

#include <iostream>
using namespace std;
int main() {
    // main function started form here:
    int firstArray[10] = {1,3,5,7,9,11,13,15,17,19};
    int secondtArray[10] = {2,4,6,8,10,12,14,16,18,20};
    int mergedArray[20];
    int firstCounter=0 , secondtCounter=0 , mergedCounter=0;
    while(firstCounter < 10 && secondtCounter < 10){
        if(firstArray[firstCounter] < secondtArray[secondtCounter]){
            mergedArray[mergedCounter] = firstArray[firstCounter];
            firstCounter++;
        } else {
            mergedArray[mergedCounter] = secondtArray[secondtCounter];
            secondtCounter++;
        }
        mergedCounter++;
    }
    while(firstCounter < 10) {
        mergedArray[mergedCounter] = firstArray[firstCounter];
        firstCounter++;
        mergedCounter++;
    }
    while(secondtCounter < 10) {
        mergedArray[mergedCounter];
        secondtCounter++;
        mergedCounter++;
    }
    for(int j=0; j<20; j++){
        //cout << mergedArray[j] << endl;
    }
    cout << mergedArray[19];
    return 0;
}

在阵列mergedArray[19]的输出中,我得到了这样的东西:2686916 !!!

我不知道为什么我会得到这个值。我

该如何解决这个问题。以及为什么我得到这个值。

最后一段时间的错别字。您可以提高警告级别,让编译器向您显示拼写错误(warning: statement has no effect [-Wunused-value])。

while(secondtCounter < 10) {
    mergedArray[mergedCounter];
    secondtCounter++;
    mergedCounter++;
}

应该是

while(secondtCounter < 10) {
    mergedArray[mergedCounter] = secondtArray[secondtCounter];
    secondtCounter++;
    mergedCounter++;
}

正如 WhozCraig 的评论所指出的那样,您没有为mergedArray[19]分配任何值,因为您遗漏了语句的赋值部分。

由于您尚未分配值,因此它会打印出以前使用中恰好位于该内存地址的任何值。 如果您多次运行程序(当前编写的程序),您将看到那里的数字可能会更改。 此外,如果您在分配任何内容之前打印出 mergedArray 中的值,您会看到更多此类无意义的(在当前应用程序中对您而言)数字。