我只包含了这个功能。我正在尝试实现二进制搜索,但由于某种原因它无法正常工作。我真正想确定的是算法是否正确。对我来说似乎很好......但可能是我错了。我知道算法必须先排序,但是在另一个函数中将会处理。算法错误还是正确?由于一些未知的原因,程序挂起......我已经处理了所有的标题等....我不在目标或什么?谢谢。功能在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;
}
答案 0 :(得分:0)
您不需要i
上的循环。
您的循环将在begin
和end
上,例如while( begin < end )
根据values[middle]
与values[begin]
和values[end]
的比较情况,您必须调整begin
(begin = middle + 1;
)或end
({{ 1}})。谨防边界情况!
答案 1 :(得分:0)
(开始+结束)/ 2可能导致C中的整数溢出。尝试使用开始+(结束 - 开始)/ 2。
答案 2 :(得分:0)
你有什么算法?我建议先通过算法。 http://en.wikipedia.org/wiki/Binary_search
答案 3 :(得分:-1)
你的中间人正在计算到最后。它应该是mid =(end-begin)/ 2