递归合并排序为 c++ 中使用 deque 的迭代

Recursive mergeSort to Iterative in c++ using deque

本文关键字:deque 迭代 合并 排序 c++ 递归      更新时间:2023-10-16

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

我只需要使这个排序函数可迭代:

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;
}

我很难将多重递归函数转变为迭代函数。

谢谢每一个和亲切的问候。

你必须使用取消排队吗?合并排序的迭代版本称为自下而上的合并排序。实际上没有必要存储额外的信息。