c - 为什么这个二分搜索会给我一个无限循环?

标签 c arrays infinite-loop binary-search

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

非常感谢大家。

最佳答案

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

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

因为每次更改 lower_boundupper_bound 的值时,middle 的值都会发生变化。

关于c - 为什么这个二分搜索会给我一个无限循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19150105/

相关文章:

c - 从 C API 推送 lua 函数作为表成员

php - 如何检查一个名称在数组中是否存在多次

java - 为什么当通过其他方法更改数组时,数组的打印结果会有所不同?

c++ - 如何在 C++ 中创建抽象类的数组

c - 程序无限循环

c - 如何在gcc中编译带有线程的C程序?

c - 了解编译、加载器、链接器和进程结构的资源

java - Java中没有参数的for循环

c - 在 C 中声明我的 int 数组

javascript - 通过 DOM 中的前置元素无限循环