此代码有效,但最后返回false。为什么不适当地返回错误?
我知道情况就是这样,因为代码是更大程序的一部分,并且应该说"没有找到针头#34;当返回false时。但是,我没有看到这个消息。
/**
* Returns true if value is in array of n values, else false.
*/
int lower = 0;
bool search(int value, int values[], int n) {
int higher = n;
if (n < 0) {
return false;
}
while (lower <= higher) {
int middle = (lower + higher) / 2;
if (values[middle] == value) {
return true;
} else if (values[middle] < value) {
lower = middle + 1;
} else if (values[middle] > value) {
lower = middle - 1;
}
}
return false;
}
答案 0 :(得分:2)
你有一个逻辑错误。
else if(values[middle]>value)
{
lower=middle-1;
}
应该是:
else if(values[middle]>value)
{
higher=middle-1;
}
更好的是,你可以使用:
else
{
higher=middle-1;
}
由于之前if
和else-if
处理其他两个案例。