【发布时间】:2019-03-13 12:02:18
【问题描述】:
调试这段代码已经有一段时间了,但我似乎找不到的问题(可能只是遗漏了一些愚蠢的东西)是我的合并排序函数(适用于整数数组)不适用于数组字符串。
void MergeSort(string *input, int lowBound, int highBound)
{
int midBound;
if (lowBound < highBound)
{
midBound = (lowBound + highBound) / 2;
MergeSort(input, lowBound, midBound);
MergeSort(input, midBound + 1, highBound);
MergeArrs(input, lowBound, highBound, midBound);
}
}
void MergeArrs(string *a, int lowBound, int highBound, int midBound)
{
int i, j, idx;
string tmp[highBound - lowBound + 1];
i = lowBound; //Index for front arr
idx = 0;
j = midBound + 1; //Index for back arr
while (i <= midBound && j <= highBound)
{
if (a[i] < a[j])
{
tmp[idx] = a[i];
idx++;
i++;
}
else
{
tmp[idx] = a[j];
idx++;
j++;
}
}
while (i <= midBound)
{
tmp[idx] = a[i];
idx++;
i++;
}
while (j <= highBound)
{
tmp[idx] = a[j];
idx++;
j++;
}
for (i = lowBound; i <= highBound; i++)
{
a[i] = tmp[i - lowBound];
}
}
如果有人知道段错误来自哪里,任何信息将不胜感激。我的测试数组如下所示:
string arr[6] = {"alpha", "beta", "omega", "zeta", "epsilon", "beach"};
并且是这样调用的:
MergeSort(arr, 0, 6);
【问题讨论】:
-
不应该
highBound是顶部 index 而不是大小? -
我怀疑访问越界,因为它有点与
ints 一起使用,并且停止使用需要正确初始化的真实对象。请测试您的所有数组访问,即someArray[i],它们的索引是否在预期范围内。 -
在许多其他问题中,
string tmp[highBound - lowBound + 1];不是有效的 C++。 -
@NeilButterworth 这不一定是个问题。 OP 可能正在使用扩展程序,它本身不是问题。
-
你试过调试器吗?它可以帮助您自己找到段错误,总体而言,它是一个非常有用的工具。
标签: c++ arrays string sorting mergesort