我想通过使用只有3个参数int值(我在找什么),int值[](数组),int n中以稍微非传统的方式实现二进制搜索(数组的大小)。下面的代码找到数字2,并认识到13不存在,但找不到像6或7这样的数字。我认为问题出现在最终的递归调用中。这可能是一个指针问题。我敢肯定,其余的代码工作正常。任何想我可能会出错的想法,将不胜感激。二进制搜索段错误
#include <stdio.h>
#include <stdbool.h>
bool search(int value, int values[], int n);
int main(void)
{
int value = 6;
int values[] = {1, 2, 3, 4, 5, 6, 7};
int n = 7;
bool x = search(value, values, n);
if (x == true)
printf("found\n");
else
printf("not found\n");
}
bool search(int value, int values[], int n)
{
int midpoint = n/2;
if (n/2 <= 0)
{
return false;
}
if (value == values[midpoint])
{
return true;
}
if (value < values[midpoint])
{
return search(value, values, n/2);
}
else if (value > values[midpoint])
{
return search(value, values, n/2);
}
return false;
}
你需要像'values + n - n/2'(这与'values + n/2'不一样)。 – user3386109
我记下我确定遵循,因为values是数组的名称。增加数量n/2似乎并不合理。尽管如此,我一定会玩弄它。非常感谢您的回复! – Ryan
'if(n/2 <= 0)'错误。 0是一个有效的数组索引。这就是为什么你的代码在数组切片的开始处找不到任何值的原因。 – tofro