簡體   English   中英

如何實現對整數數組的二進制搜索?

[英]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

進一步的改進可以是:

  1. 您可以在else部分中排除middle ,因為您已經證明它不是正確的值( right = middle; => right = middle - 1;

  2. 第二個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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM