我一直在努力在C中实现一个二进制搜索函数,它似乎在每种情况下工作,除了找到正在搜索的数组中的最后一个值。请任何人如此善意地指引我走向正确的方向。非常感谢!我知道这可能是一些糟糕和低效的代码,(我只有几天的时间,请原谅我!),所以我会在未来考虑你的所有指导。二进制搜索不返回数组中的最后一个值
bool search(int value, int values[], int n)
{
int middle = (n/2);
if (n < 0)
{
return false;
}
if (n < 2 && n > 0)
{
if (value == values[0])
{
return true;
}
else
{
return false;
}
}
const int MAX = 65536;
int half[MAX];
if (value > values[middle])
{
int new_size = n - middle - 1;
for (int i = 0, m = middle + 1; i < new_size; i++, m++)
{
half[i] = values[m];
}
return search(value, half, new_size);
}
else if (value < values[middle])
{
int new_size = n - middle;
for (int i = 0, m = 0; i < middle; i++, m++)
{
half[i] = values[m];
}
return search(value, half, new_size);
}
else if (value == values[middle])
{
return true;
}
return false;
}
void sort(int values[], int n)
{
int swap;
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
if (values[j] > values[j + 1])
{
swap = values[j + 1];
values[j + 1] = values [j];
values[j] = swap;
}
}
}
}
这个算法效率非常低。为什么每次都需要一个新的阵列?你可以保留两个指针到数组的开始和结束处,并根据需要改变它们! –
在这种情况下使用调试器非常有用。 – Rohan
1)'int new_size = n - middle;' - >'int new_size = middle;' – BLUEPIXY