为什么合并打印是倒序的

Why is the merge printing in reverse order

所以,我正在学习合并排序算法。我很惊讶地看到合并是以相反的顺序打印的。你可以看到我在每一步都打印了合并向量 v 但我不明白为什么它是相反的顺序。完美的最终答案。

void merge(vector<int> &left, vector<int> &right, vector<int> &v) {
    cout << "merged vector is : \n";
    for (auto x : v)
        cout << x << " ";
    cout << endl; 

    int l = left.size();
    int r = right.size();

    int i = 0, j = 0, k = 0;
    while (i < l && j < r) {
        if (left[i] <= right[j]) {
            v[k] = left[i];
            i++;
        } else {
            v[k] = right[j];
            j++;
        }
        k++;
    }
    while (i < l) {
        v[k++] = left[i++];
    }
    while (j < r) {
        v[k++] = right[j++];
    }
    return;
}

您在每个步骤的开始 打印目标向量v。目标向量的内容和顺序取决于您如何使用合并排序算法,即如何拆分原始向量,如何调用 merge 函数以及源向量的原始内容是什么。如果你想跟踪合并排序算法的行为,你应该在合并操作后打印向量。

另请注意:

  • 索引变量 ijklr 的类型应为 size_t.
  • 函数末尾的return;语句没有用