二进制搜索...此代码有问题

时间:2014-04-01 02:37:42

标签: c algorithm search binary

我只包含了这个功能。我正在尝试实现二进制搜索,但由于某种原因它无法正常工作。我真正想确定的是算法是否正确。对我来说似乎很好......但可能是我错了。我知道算法必须先排序,但是在另一个函数中将会处理。算法错误还是正确?由于一些未知的原因,程序挂起......我已经处理了所有的标题等....我不在目标或什么?谢谢。功能在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;
}

4 个答案:

答案 0 :(得分:0)

您不需要i上的循环。

您的循环将在beginend上,例如while( begin < end )

根据values[middle]values[begin]values[end]的比较情况,您必须调整beginbegin = middle + 1;)或end({{ 1}})。谨防边界情况!

答案 1 :(得分:0)

(开始+结束)/ 2可能导致C中的整数溢出。尝试使用开始+(结束 - 开始)/ 2。

答案 2 :(得分:0)

你有什么算法?我建议先通过算法。 http://en.wikipedia.org/wiki/Binary_search

答案 3 :(得分:-1)

你的中间人正在计算到最后。它应该是mid =(end-begin)/ 2