为什么这个二进制搜索给我一个无限循环?

时间:2013-10-03 03:10:37

标签: c arrays infinite-loop binary-search

我正在尝试二进制搜索。我真的想不出为什么我会得到一个无限循环?是因为我在某处忽略了null值吗?值,值[]和n由不同的文件提供,并且由其他人编写,并且出于此问题的目的,它们是完美编码的。

bool search(int value, int values[], int n)
{
    int upper_bound = n - 1;
    int lower_bound = 0;
    int middle = (upper_bound + lower_bound) / 2; 

    while (lower_bound <= upper_bound)
    {
        if (values[middle] == value)
        {
            return true;
        }
        else if (values[middle] > value)
        {
            upper_bound = middle - 1; 
        }
        else if (values[middle] < value)
        {
            lower_bound = middle + 1;
        }
        else 
        {
            return false;
        }

    }
    return false;
}

非常感谢你们。

2 个答案:

答案 0 :(得分:1)

您需要在middle循环中计算while的值:

while (lower_bound <= upper_bound){
int middle = (upper_bound + lower_bound) / 2;
...
}

每当您更改middlelower_bound的值时,upper_bound的值都会更改。

答案 1 :(得分:0)

中间值是固定的。由于upper_boundlower_bound的值正在发生变化,因此不会发生变化。