gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 13:52:34 25 4
gpt4 key购买 nike

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

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

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com