递归合并排序为 c++ 中使用 deque 的迭代
Recursive mergeSort to Iterative in c++ using deque
我正在尝试执行此多重递归合并排序的迭代版本:
我只需要使这个排序函数可迭代:
template<class T> deque<T> mergesort<T>::sort(deque<T> &right){
int size = right.size();
if (size <= 1){
return right;
}
int middle = size/2;
deque<T> left;
for(int i = 0; i < middle; i++){
left.push_back(right.front());
right.pop_front();
}
left = sort(left);
right = sort(right);
return merge(left, right);
}
合并函数可以相同:
template<class T> deque<T> mergesort<T>::merge(deque<T> &left, deque<T> &right){
deque<T> result;
while(left.size() > 0 || right.size() > 0){
if (left.size() > 0 && right.size() > 0){
if (getOrder(left.front(),right.front())){
result.push_back(left.front());
left.pop_front();
}
else{
result.push_back(right.front());
right.pop_front();
}
}
else if(left.size() > 0){
result.push_back(left.front());
left.pop_front();
}
else if(right.size() > 0){
result.push_back(right.front());
right.pop_front();
}
}
return result;
}
我很难将多重递归函数转变为迭代函数。
谢谢每一个和亲切的问候。
你必须使用取消排队吗?合并排序的迭代版本称为自下而上的合并排序。实际上没有必要存储额外的信息。
相关文章:
- 使用std::multimap迭代器创建std::list
- 来自 std::list 的迭代器 .end() 按预期返回"0xcdcdcdcdcdcdcdcd"但 .begin()
- C++中带有List类的迭代器Segfault
- 迭代时从向量和内存中删除对象
- 如何在c++迭代器类型中包装std::chrono
- 带过滤器的现代迭代c++集合
- Deque 迭代器超出范围
- 随机访问迭代器和Deque
- 具有deque的随机访问迭代器的迭代器无效
- Deque索引迭代器转换
- C++ deque:当迭代器失效时
- 调试断言失败的c++deque迭代器不可取消引用
- Deque迭代程序错误
- 对std::deque执行迭代器在容器两端插入或擦除后会失效
- 错误:deque迭代器不可解引用
- 如何避免在std::deque中' deque迭代器不可解引用' ?锁
- 为什么GCC -O3在std::deque上使用过滤器迭代器会导致std::距离无限?
- 如何实现非连续容器(如std::deque)的随机访问迭代器
- 递归合并排序为 c++ 中使用 deque 的迭代
- Deque迭代器不可解引用