C++ c+中递归合并排序到迭代排序+;使用deque
我正在尝试此多重递归合并排序的迭代版本: 我只需要将iterable设置为此排序函数:C++ c+中递归合并排序到迭代排序+;使用deque,c++,recursion,mergesort,iteration,C++,Recursion,Mergesort,Iteration,我正在尝试此多重递归合并排序的迭代版本: 我只需要将iterable设置为此排序函数: 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> lef
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);
}
模板deque mergesort::sort(deque&right){
int size=right.size();
如果(大小0 | | right.size()>0){
if(left.size()>0&&right.size()>0){
if(getOrder(left.front(),right.front()){
结果:向后推(左前());
左。pop_front();
}
否则{
结果:向后推(右前());
右。弹出前();
}
}
else if(left.size()>0){
结果:向后推(左前());
左。pop_front();
}
else if(right.size()>0){
结果:向后推(右前());
右。弹出前();
}
}
返回结果;
}
我很难把多重递归函数转换成迭代函数
谢谢大家和亲切的问候。您必须使用排队吗?合并排序的迭代版本称为。真的没有必要存储额外的信息
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;
}