c++ - 我的二进制搜索程序简单地关闭了

标签 c++

我的二进制搜索只能提供数组中前 4 个条目的值。对于每一个更大的值,程序都会卡住并自行关闭,除非我的值在数组的上半部分,然后它只是跳转到返回 -1 ...我真的找不到我的错误在这里

int BinarySearch(int data[], int numElements, int searchKey)
{

    int mid;
    int numMin = 0;

    while (numMin <= numElements)
    {               
        mid = numMin + floorf ((numElements - 1)  / 2); // middle of the array initializing

        //Searched Value is right at the middle
        if (data[mid] == searchKey)
        {
            return mid;     

        }

        // If Searched value is greater, ignore left half
        else if (data[mid] < searchKey)
        {
            numMin = mid + 1; // new lowest value is middle of array +1

        }
        // If Searched value is smaller, ignore right half
        else
        {   
            numElements = mid - 1; // new highest value is middle of the array -1
        }

    }

    return -1;
}

最佳答案

你对 numElements 的理解有误,你一开始用它作为元素的数量,但它应该是 endIndex,而 numMin 应该是 startIndex

while 循环的第一行是错误的:

mid = numMin + floorf ((numElements - 1)  / 2); 

应该是:

mid = (numMin + numElements) / 2; 

关于c++ - 我的二进制搜索程序简单地关闭了,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52910181/

相关文章:

c++ - 尝试从 std::stack 中删除项目时出错

c++ - 我可以检测成员函数是否存在并且可以被 C++ 中的 friend 访问吗?

c++ - 内存分配导致内存泄漏

c++ - virtual ~T(){} 和 virtual ~T() = default 之间的区别;

c# - 静态绑定(bind)期间 C++ 和 Ada 的差异

c++ - move 分配与标准 copy-and-swap 不兼容

C++11 非静态成员初始值设定项和已删除的复制构造函数

c++ - 大 O 和树遍历

c++ - 为什么在不专门化类的情况下不允许成员的显式专门化?

c++ - 静态数据成员是否可以在 C++ 中键入其容器类型?