我正在尝试执行此多重递归归并排序的迭代版本:
我只需要使这个排序函数可迭代:
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;
}
我很难将多个递归函数转换为迭代函数。
谢谢大家和亲切的问候。
最佳答案
一定要用dequeue吗?合并排序的迭代版本称为 bottom-up merge sort .真的没有必要存储额外的信息。
关于c++ - 使用双端队列在 C++ 中递归合并排序到迭代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22896063/