0

我正在尝试进行二进制搜索。我真的想不出为什么我会陷入无限循环?是因为我忽略了某处的空值吗?值、values[] 和 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;
}

非常感谢大家。

4

2 回答 2

1

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

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

因为middle每次更改lower_bound或的值时, 的值都应该改变upper_bound

于 2013-10-03T03:24:58.663 回答
0

中间值是固定的。它并没有随着价值的改变而改变,upper_bound并且lower_bound正在改变。

于 2013-10-03T04:02:35.060 回答