[英]Recursive mergeSort to Iterative in c++ using deque
我正在尝试做此多重递归mergesort的迭代版本:
我只需要使此排序函数可迭代即可:
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;
}
对于我来说,很难将多重递归函数转换为迭代函数。
感谢大家的亲切问候。
您是否必须使用出队? 合并排序的迭代版本称为自下而上的合并排序 。 确实不需要存储额外的信息。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.