二分查找

二分查找又稱折半查找,優點是比較次數少,查找速度快,平均性能好;其缺點是要求待查表爲有序表,且插入刪除困難。因此,折半查找方法適用於不經常變動而查找頻繁的有序列表。二分查找的基本思想是將n個元素分成大致相等的兩部分,取a[n/2]與x做比較,如果x=a[n/2],則找到x,算法中止;如果x

class Test
{
public:
int binary_search(int* arr, int len, int goal)
{
    int low = 0;
    int high = len -1;
    while (low <= high)
    {
        int middle = (high - low) / 2 + low;     // 直接使用(high + low) / 2 可能導致溢出
        if (arr[middle] == goal)
            return middle;
        //在左半邊
        else if (arr[middle] > goal)
            high = middle - 1;
        //在右半邊
        else
            low = middle + 1;
    }
    //沒找到
    return -1;
}
};

int main()
{
    int arr[10] = {11,23,34,45,67,78,89,90,100,114};
    int len = sizeof(arr)/sizeof(arr[0]);
    Test test;
    cout<<test.binary_search(arr,len,34);
    return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章