我只包含了该功能。我正在尝试实现二分搜索,但由于某种原因它不起作用。我真正想确定的是算法是否正确。对我来说似乎很好......但可能我错了。我知道必须首先对算法进行排序,但这将在另一个函数中进行处理。算法是错还是对?由于某种未知的原因,程序挂起...我已经处理了所有标题等...我偏离了目标还是什么?谢谢。函数在 C 语言中。
bool search(int value, int values[], int n)
{
int i;
int begin = 0;
int end = n-1;
int middle = (begin + end)/2;
for ( i = 0; middle <=end; i++)
if (value == values[middle])
{
return true;
break;
}
else if (value > values[middle])
{
begin = values[middle +1];
}
else
{
end = values[middle -1];
}
return false;
}
最佳答案
您不需要 i
上的循环.
您的循环将位于 begin
和end
,如while( begin < end )
取决于如何values[middle]
与 values[begin]
比较和values[end]
,你必须调整begin
( begin = middle + 1;
) 或 end
(end = middle - 1;
)。当心边界情况!
关于c - 二分查找...这段代码有问题吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22775797/