gpt4 book ai didi

c++ - 合并排序问题

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:38:32 25 4
gpt4 key购买 nike

大家好,我目前正在致力于实现合并排序算法,并且我的代码可以正常工作,但我的工作仍然存在问题。例如,当我输入“1 3 5 2”时,我会收到“1 3 5 5”。我需要一些帮助来定位我的错误,因为即使使用 cerr 语句我也无法这样做。谢谢你

vector<int> VectorOps::mergeSort(vector<int> toSort)
{
if (toSort.size() <= 1)
{
return toSort;

}

std::vector<int>::iterator middle = toSort.begin() + (toSort.size() / 2);

vector<int> left(toSort.begin(), middle);
vector<int> right(middle, toSort.end());
left = mergeSort(left);
right = mergeSort(right);
cerr << "The numbers are "<< endl;
return merge(left, right);

}


vector<int> merge(const vector<int>& left, const vector<int>& right)
{

vector<int> toReturn;
unsigned left_it = 0, right_it = 0;

while(left_it < left.size() && right_it < right.size())
{



if(left[left_it] < right[right_it])
{
toReturn.push_back(left[left_it]);
left_it++;


}
else
{

toReturn.push_back(left[left_it]);
right_it++;
}
}
while(left_it < left.size())
{
toReturn.push_back(left[left_it]);
left_it++;
}

while(right_it < right.size())
{
toReturn.push_back(right[right_it]);
right_it++;

}




return toReturn;

}

最佳答案

merge的第一个条件中,两个分支都有

toReturn.push_back(left[left_it]);

其中一个应该是

toReturn.push_back(right[right_it]);

这就是为什么复制和粘贴被认为是有害的。

关于c++ - 合并排序问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21124904/

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