C++ c+中递归合并排序到迭代排序+;使用deque

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

我正在尝试此多重递归合并排序的迭代版本:

我只需要将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> 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;
}