二进制搜索卡住无限循环?

LF4*_*LF4 2 c++ binary-search infinite-loop

我创建了这个二进制搜索,但它似乎每次都陷入循环.所有它的检查是一个向量.我不知道我需要改变什么我已经尝试了很多不同的东西.

[1,2,4,6]如果我搜索4是永远不会被发现它继续击中较低= mid + 1.

bool SortSearch::binarySearcher(int size, int val)
{
    int lower = 0, upper = size - 1, mid;

    while (lower < upper)
    {
        mid = (lower + (upper-lower))/2;
        if (students[mid].getID() > val)
            upper = mid - 1;
        else if (students[mid].getID() < val)
            lower = mid + 1;
        else if (students[mid].getID() == val)
            return true;
        else
            return false;
    }
}
Run Code Online (Sandbox Code Playgroud)

Adr*_*thy 9

我相信:

mid = (lower + (upper-lower))/2;
Run Code Online (Sandbox Code Playgroud)

应该:

mid = lower + (upper-lower)/2;
Run Code Online (Sandbox Code Playgroud)

我可能会补充:

assert(lower <= mid && mid <= upper);
Run Code Online (Sandbox Code Playgroud)

另外,:

return false;
Run Code Online (Sandbox Code Playgroud)

应该在循环之后.一旦你检查了<,并且>剩下的唯一可能的结果是==(带有整数),所以final else子句永远不会命中.(如果你使用浮点类型作为索引,那么你可以得到一些奇怪的情况,包括NaN,无穷大,也许是负零.)

调高编译器的警告级别.它本应该警告你关于无法访问的代码和没有返回的路径.