合并排序相同的输出 C++

Merge sort same output C++

我为归并排序写了下面的代码,但它不起作用,而且我无法找出问题所在! 每次输出与输入相同时,我认为由于向量引用可能会出现问题。 我认为 mergeSort 没有为子数组创建新的向量。但我仍然很困惑。

输入向量:5, 4, 3, 2, 1
输出:5, 4, 3, 2, 1
请求输出:1, 2, 3, 4, 5

#include <iostream>
#include <vector>

using namespace std;

void merge(vector<int> &la, vector<int> &ra, vector<int> &A) {

    int i = 0, j = 0, k = 0;

    //  overwriting A using its solved sub arrays i.e la, ra
    while (i < la.size() && j < ra.size()) {
        if (la[i] <= ra[j]) {
            A[k] = la[i];
            i++;
            k++;
        } else {
            A[k] = ra[j];
            j++;
            k++;
        }
    }

    //  if any subarray left then
    while (i < la.size()) {
        A[k] = la[i];
        k++;
        i++;
    }
    while (j < ra.size()) {
        A[k] = ra[j];
        k++;
        j++;    
    }
}

合并排序函数:

void mergeSort(vector<int> &A) {

    if (A.size() < 2)
        return;

    int len = A.size();
    vector<int> la, ra;

    for (int i = 0; i < len / 2; i++)
        la.push_back(A[i]);

    for (int i = len / 2; i < len; i++)
        ra.push_back(A[i]);

    //  dividing the proble into subproblem
    mergeSort(la);
    mergeSort(ra);

    //  merging the solved subproblem
    merge(la, ra, A);
}

驱动函数:

int main(void) {
    int arr[] = { 5, 4, 3, 2, 1 };
    vector<int> A(arr, arr + 5);
    for (int i = 0; i < A.size(); i++)
        cout << A[i] << " ";
    cout << endl;

    mergeSort(A);

    for (int i = 0; i < A.size(); i++)
        cout << A[i] << " ";
    return 0;
}

贴出的代码好像没有问题

执行它会产生预期的输出:1 2 3 4 5,所以还有其他事情可能会引起您的观察:您可能 运行 由以前的版本或至少不同的版本生成的可执行文件代码。