c++ - 使用双端队列在 C++ 中递归合并排序到迭代

标签 c++ recursion mergesort iteration

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

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

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/

相关文章:

c++ - Matlab 编码器不支持的函数

c++ - MPI 发送消息或将它们作为参数

java - 在数组中查找所有可能的对

Prolog 合并排序的实现不会停止

java - 在java中实现归并排序

C++ 合并排序返回原始 vector

c++ - 消息循环如何使用线程?

C++使用Strtok读取字符串字符时出错

c - 尾递归函数中的段错误?

php - 值不会推送到递归数组上