为什么合并打印是倒序的
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
函数以及源向量的原始内容是什么。如果你想跟踪合并排序算法的行为,你应该在合并操作后打印向量。
另请注意:
- 索引变量
i
、j
、k
、l
和 r
的类型应为 size_t
.
- 函数末尾的
return;
语句没有用
所以,我正在学习合并排序算法。我很惊讶地看到合并是以相反的顺序打印的。你可以看到我在每一步都打印了合并向量 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
函数以及源向量的原始内容是什么。如果你想跟踪合并排序算法的行为,你应该在合并操作后打印向量。
另请注意:
- 索引变量
i
、j
、k
、l
和r
的类型应为size_t
. - 函数末尾的
return;
语句没有用