为啥合并打印顺序相反

Posted

技术标签:

【中文标题】为啥合并打印顺序相反【英文标题】:Why is the merge printing in reverse order为什么合并打印顺序相反 【发布时间】:2019-12-06 23:30:21 【问题描述】:

所以,我正在学习合并排序算法。我很惊讶地看到合并以相反的顺序打印。你可以看到我在每一步都打印合并向量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?问题可能是由于自上而下的递归合并排序,它将首先排序深度,左优先,但没有看到合并排序代码,我无法确定。 @rcgldr 是的,你是对的。我实际上在合并后显示它们并猜测它的工作原理! 【参考方案1】:

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

还要注意:

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

【讨论】:

以上是关于为啥合并打印顺序相反的主要内容,如果未能解决你的问题,请参考以下文章

为啥这两个变量之一以相反的顺序打印到文件中?

我在运行代码时遇到错误,该代码接受用户的温度并以相反的顺序打印,为啥会这样?

为啥线程味精以相反的顺序出现?

一个用于合并pdf的简单Python脚本

两个线性表合并

怎样让多张图片双面打印按顺序打印?