gpt4 book ai didi

C++:合并排序问题:超出范围?

转载 作者:行者123 更新时间:2023-11-28 00:31:11 26 4
gpt4 key购买 nike

(C++)大家好,这是我第一次尝试合并排序。我看到我的代码类似于之前发布问题的人:here .在较低级别,排序按预期工作。但是,我相信我这里的问题是排序数组在每个较低级别之后超出范围,因此永远不会正确排序。在这种情况下,我尝试使用“std::vector&”通过引用传递。我错了吗?通过引用传递的正确方法是什么?

下面是我的代码:

/*
MERGE SORT
breaking down the sorting into pairs concursively until we are comparing only two values
The two integers parameters denotes indices for beginning and ending values in vector
Merge sort inclusive of both left and right range
*/
#include <vector> // for using vectors in c++
void merge(std::vector<int>& inputv, int beg_i, int end_i)
{
int d = beg_i; // used as an index
int e = beg_i + (end_i - beg_i)/2 + 1; // used as an index

int y = beg_i + (end_i - beg_i)/2; // used as a check against d
int z = end_i; // used as a check against e

std::vector<int> tempvect(inputv.size());

for (int c = beg_i; c < z+1; c++)
{
if (e > z && d > y)
{
// do nothing
}
else if (e > z)
{
tempvect[c] = inputv[d];
d++;
}
else if (d > y)
{
tempvect[c] = inputv[e];
e++;
}

else if(inputv[d] > inputv[e])
{
tempvect[c] = inputv[e];
e++;
}
else if(inputv[d] <= inputv[e])
{
tempvect[c] = inputv[d];
d++;
}
}
for (int i = beg_i; i < end_i+1; i++)
{
inputv[i] = tempvect[i];
}
}

void mergesort(std::vector<int> inputvector, int beg_i, int end_i)
{
if(end_i - beg_i == 0)
{
// do nothing
}
if(end_i - beg_i >= 1)
{
int mid_i = beg_i + (end_i - beg_i)/2;

mergesort(inputvector,beg_i,mid_i); // reclusive to last card
mergesort(inputvector,mid_i+1,end_i); // resulsive to last card
merge(inputvector,beg_i,end_i); // actual implementation to sort and merge the vectors
}

}

最佳答案

如果您想模仿您在突出显示的线程中看到的代码,请注意该代码使用了一个指针。使用指针的函数基本上是在改变指针指向的内容。

因此你应该这样做来模拟这种行为:

void mergesort(std::vector<int>& inputvector, int beg_i, int end_i)

您必须通过引用传递 vector 。你没有看到结果的原因是按值传递创建了一个本地临时拷贝,当函数返回时,临时拷贝消失了。您不希望这样——您希望将结果定向到您传入的 vector ,而不是临时拷贝,因此通过引用传递 vector 。

关于C++:合并排序问题:超出范围?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22877310/

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