我的二进制搜索程序只是关闭了

时间:2018-10-20 21:16:38

标签: 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;
}

2 个答案:

答案 0 :(得分:0)

您对numElements的解释有误,您起初将其用作元素数量,但应为endIndex,而numMin应为startIndex

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

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

应该是:

mid = (numMin + numElements) / 2; 

答案 1 :(得分:0)

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

这将不会计算出mid的正确版本是

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

因为当您将numMin添加到mid时,您只需要添加((numElements - numMin) / 2)即可获得中间值。

或者您可以简单地执行以下操作。

mid = (numMin + numElements) / 2;