在 C++ 中使用合并函数算法时遇到问题

Having trouble with merge function algorithm in C++

一段时间以来,我一直在试图弄清楚调用这两个函数可能出了什么问题,但似乎无法识别。当我在 show 函数之前调用合并函数时,它工作正常并合并两个数组然后显示它们否则,如果我在任何其他函数之后调用合并函数(例如 show(a,els) 和 show(b, els)), 合并函数不起作用并输出合并数组中的所有零。任何想法都会很有帮助。

int main(){
    const unsigned els = 5;
    unsigned a[els] = {1,2,3,4,5};
    unsigned b[els] = {1,2,3,4,4};
    unsigned combo[(els*2)];

    show( a, els);
    show( b, els);

    merge( combo, a, els, b, els);
    show( combo, els*2);

    return 0;
}

void show( const unsigned a[], unsigned elements ){
    cout << "[" << elements << "]: ";
    for ( unsigned i = 0; i < elements; i++)
    {
        cout << a[i]; //Outputting contents of array
        if(i != elements-1)
            cout << ","; 
    }
    cout << endl;
}


void merge( unsigned combo[], const unsigned a[], unsigned aElements, const
unsigned b[], unsigned bElements ){

    string notsort(" Array is not sorted");
    if((!sorted(a, aElements)) || (!sorted(b, bElements)))
        die(notsort);

    unsigned i,j,k = 0;
    while(i < aElements && j < bElements){
        if(a[i] <= b[j]){
            combo[k]= a[i];
            i++;
        } else {
            combo[k] = b[j];
            j++;
        }
        k++;
    }
    if(i < aElements){
        for(int x = i; x < aElements; x++){
            combo[k] = a[x];
            k++;
        }
    }else{
        for(int x = j; x < bElements; x++){
            combo[k] = b[x];
            k++;
        }
    }
}

a 和 b 显示后带合并功能的输出:

[5]: 1,2,3,4,5
[5]: 1,2,3,4,4
[10]: 0,0,0,0,0,0,0,0,0,0

在 a 和 b 显示之前使用合并功能输出:

[10]:1,1,2,2,3,3,4,4,4,5
[5]: 1,2,3,4,5
[5]: 1,2,3,4,4

您在 merge 函数中有 undefined behavior,因为您没有初始化 ij 变量。这意味着它们的值是 indeterminate(实际上看起来是随机的)。

在声明变量的时候,需要分别初始化每个个变量,不能像现在这样,希望所有的变量都被初始化。

所以从

unsigned i,j,k = 0;

unsigned i = 0, j = 0, k = 0;