[英]How do I implement binary search for an array of integers?
我想對整數數組實施二進制搜索。 我確保該數組遞增排序。 但是我的職能不是跟蹤所有情況,並且某些檢查失敗。 我在這里想念什么? Value
代表我要查找的整數。
bool search(int value, int array[], int n)
{
int left = 0;
int right = n - 1;
int middle = (left + right) / 2;
while (right >= left)
{
if (array[middle] == value)
return true;
else if (array[middle] < value)
right = middle;
else if (array[middle] > value)
left = middle + 1;
middle = (left + right) / 2;
}
return false;
}
我的猜測是,某些左邊界或右邊界情況是無法預測的。 我也沒有強有關while
條件。
您左右混合,如果array[middle] < value
您必須更改left
。
bool search(int value, int array[], int n)
{
int left = 0;
int right = n - 1;
int middle = left + (right - left) / 2;
while (right >= left)
{
if (array[middle] == value)
return true;
else if (array[middle] > value)
right = middle - 1;
else if (array[middle] < value)
left = middle + 1;
middle = (left + right) / 2;
}
return false;
}
可以使用: http : //ideone.com/VSAhnZ
進一步的改進可以是:
您可以在else
部分中排除middle
,因為您已經證明它不是正確的值( right = middle;
=> right = middle - 1;
)
第二個else if
可以用else
代替。 如果不是該值且不小於該值,則不必測試該值是否較大。
標准二進制搜索算法可以在任何地方找到。 但只需更正您的代碼:
bool search(int value, int array[], int n)
{
int left = 0;
int right = n - 1;
int middle;
while (left <= right)
{
middle = (left + right) / 2;
if (value > array[middle] )
left = middle + 1;
else if (value < array[middle])
right = middle - 1;
else
return true;
}
return false;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.