我的二进制搜索只能传递数组中前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;
}
答案 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;