【发布时间】:2019-03-17 22:08:50
【问题描述】:
我已阅读并理解 Mergesort 的工作原理(作为文本),现在我正在尝试对其进行编码。我已经完成了划分数据的部分(我使用向量),直到它的每个大小都为 1。现在我已经为 Mergesort 中的另一个必需部分编写了代码,我不知道如何调用它,但我只是调用它“比较和排序部分”。
您有 2 个向量,这部分应该比较第一个元素,取较小的元素,然后删除所选元素并将其放入新向量中。这样做直到两个向量的大小都为 0。
很抱歉代码太长,但我真的不明白为什么最后一个元素被代码忽略了? :/ 我添加了一些 cmets,所以也许更容易遵循我尝试做的事情。
我尝试作为输入:
vector<int> v1 = {1,4,5,9}; vector<int> v2 = {2,3,6,7,8};
输出:
1 2 3 4 5 6 7 8 0
vector<int> sortit(vector<int> &left, vector<int> &right) {
vector<int> sorted(left.size() + right.size());
int i = 0;
while (left.size() > 0 && right.size() > 0) {
if (left.at(0) <= right.at(0)) {
sorted.at(i) = left.at(0); // putting the smaller element into the new vector
left.erase(left.begin()); // removing this smaller element from the (old) vector
}
else if (right.at(0) <= left.at(0)) {
sorted.at(i) = right.at(0); // see comment above
right.erase(right.begin()); // see comment above
}
else if (left.size() <= 0 && right.size() > 0) { // if left vector has no elements, then take all elements of the right vector and put them into the new vector
while (right.size() > 0) {
sorted.at(i) = right.at(0);
right.erase(right.begin());
}
}
else if (right.size() <= 0 && left.size() > 0) { // the same just for the right vector
while (left.size() > 0) {
sorted.at(i) = left.at(0);
left.erase(left.begin());
}
}
i++;
}
return sorted;
}
【问题讨论】:
标签: c++ algorithm sorting mergesort