我正在尝试二进制搜索。我真的想不出为什么我会得到一个无限循环?是因为我在某处忽略了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;
}
非常感谢你们。
答案 0 :(得分:1)
您需要在middle
循环中计算while
的值:
while (lower_bound <= upper_bound){
int middle = (upper_bound + lower_bound) / 2;
...
}
每当您更改middle
或lower_bound
的值时,upper_bound
的值都会更改。
答案 1 :(得分:0)
中间值是固定的。由于upper_bound
和lower_bound
的值正在发生变化,因此不会发生变化。