我正在尝试进行二分搜索。我真的想不出为什么我会陷入无限循环?是因为我忽略了某个地方的空值吗?值、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_bound
或 upper_bound
的值时,middle
的值都会发生变化。
关于c - 为什么这个二分搜索会给我一个无限循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19150105/