繁体   English   中英

递归mergeS使用deque在c ++中排序为Iterative

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM