为啥合并打印顺序相反
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
函数以及源向量的原始内容是什么。如果要跟踪归并排序算法的行为,则应在归并操作后打印向量。
还要注意:
索引变量i
、j
、k
、l
和r
的类型应为size_t
。
函数末尾的return;
语句没有用。
【讨论】:
以上是关于为啥合并打印顺序相反的主要内容,如果未能解决你的问题,请参考以下文章