c++ - 如何在 C++ 中为 mergeSort 编写合并函数?
问题描述
我正在学习 C++ 并尝试编写合并函数,该函数将采用两个排序列表并将它们组合成一个排序列表。这应该在 O(n) 时间内运行。下面是我的代码:
LinkedList<T> LinkedList<T>::merge(const LinkedList<T>& other) const {
LinkedList<T> left = *this;
LinkedList<T> right = other;
LinkedList<T> merged;
if (left.size() <= 1) {
return left;
}
else{
while (left.size() > 0 && right.size() > 0){
if (left.front() <= right.front()){
merged.pushBack(left.front());
left.popFront();
}
else {
merged.pushBack(right.front());
right.popFront();
}
}
}
return merged;
}
这是我的测试:
Testing merge():
Left List: [(1)(3)(5)] Right List: [(-1)(2)(10)(20)]
Merged: [(-1)(1)(2)(3)(5)]
Expected: [(-1)(1)(2)(3)(5)(10)(20)]
我认为这是因为当其中一个列表为空时,循环停止。谁能建议我如何处理这个问题?非常感谢。
解决方案
在有条件运行的主 while 循环之后,直到两个数组都包含元素。因此,当其中一个为空时,它会退出,并且其中一个数组可能仍包含剩余的元素。您还需要在外部添加一个 while 循环,以将剩余的元素添加到结果数组中。这是示例:
while (left.size() > 0)
{
merged.pushBack(left.front());
left.popFront();
}
while (right.size() > 0)
{
merged.pushBack(right.front());
right.popFront();
}
推荐阅读
- bash - 在 Bash 脚本中分配内存时遇到问题
- python - 将我的 python 应用程序部署到 heroku 的问题
- android - 重复类 kotlin 类 kotlin 版本 1.3.70
- java - 使用 SoundPool、Timer 和 TimerTask 每分钟播放一个随机声音
- c++ - 如何在 Qt 中将消息从子窗口小部件发送到父窗口?
- python-3.x - 为什么可滚动画布中的按钮不动?(Python3 + tkinter)
- css - 为什么更改单个组件的 css 会影响所有其他组件?
- google-apps-script - Google Script/Sheet 不确定如何从用户个人资料中提取员工信息部分的信息,例如员工 ID 和职位
- python - 由于 Python 2 中的可变长度可选参数 (*args) 而导致的错误
- python - 在 Django REST 框架中公开 MoneyFields?