二分查找

二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难。因此,折半查找方法适用于不经常变动而查找频繁的有序列表。二分查找的基本思想是将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;
}
点赞