折半查找(二分查找)

简介:
最基本的算法:
int BinarySearch( int arr[],  int len,  int searchKey)
{
    int start = 0, end = len - 1, mid;
    while (start <= end)
    {
        // 求中间的索引值
        mid = (start + end) / 2;

        if (arr[mid] == number)
        {
            // 查到了
            return mid;
        }

        else if (arr[mid] < searchKey)
        {
            // 搜索范围缩小到后半部
            start = mid + 1;
        }

        else if (arr[mid] > searchKey)
        {
            // 搜索范围缩小到前半部
            end = mid - 1;
        }

    }


    // 没查到
    return -1;
}


用到递归的算法:
int BinarySearch(  const  int arr[],  int searchKey,  int start,  int end )
{
    // 求中间的索引值
    int mid = ( start + end ) / 2;

    if ( searchKey == arr[ mid ] )
    {
        // 找到了
        return mid;
    }

    else if ( searchKey < arr[ mid ] )
    {
        // 搜索范围缩小到前半部
        return BinarySearch( arr, searchKey, start, mid - 1 );
    }

    else if ( searchKey > arr[ mid ] )
    {
        // 搜索范围缩小到后半部
        return BinarySearch( arr, searchKey, mid + 1, end );
    }

    else
    {
        // 没有查找到
        return -1;
    }

}


使用迭代实现:
int BinarySearch(  const  int arr[],  const  int& len,  const  int& searchKey )
{  
    int start=0, end=len-1, mid;
    while ( start < end )
    {
        mid = (start + end) / 2;

        if ( searchKey > arr[mid] )
        {
            start = mid + 1;
        }

        else
        {
            end = mid;
        }

    }


    if ( start > end )
    {
        return -1;
    }

    else
    {
        if ( searchKey == arr[start] )
        {
            return start;
        }

        else
        {
            return -1;
        }

    }

}



测试代码:
void testBinarySearch()
{
    const int LEN = 8;
    int a[LEN] = { 1, 2, 2, 2, 5, 6, 8, 9 };

    printf("查找到的索引号为:%d\n", BinarySearch(a, LEN, 5));

    printf("查找到的索引号为:%d\n", BinarySearch(a, 5, 0, LEN-1));
}
目录
相关文章
|
6月前
|
算法 索引
二分查找(一)
二分查找(一)
|
6月前
|
算法 索引
二分查找(二)
二分查找(二)
|
6月前
|
算法 C++
C++021-C++二分查找
C++021-C++二分查找
C++021-C++二分查找
|
6月前
|
存储 算法
03 折半查找
  折半查找又称为二分查找。它仅适用于有序的顺序表。   折半查找的基本思想:首先给定值 key 与表中中间位置的元素比较,若相等,则查找成功,返回该元素的存储位置;若不等,则所需查找的元素只能在中间元素以外的前半部分或后半部分(例如,在查找表升序排列时,若给定值 key 大于中间元素,则所查找的元素只可能在后半部分)。然后在缩小的范围内继续进行同样的查找,如此重复,知道找到位置,或确定表中没有所需要查找的元素,则查找不成功,返回查找失败的信息。  
33 0
|
算法 索引
【二分查找】
【二分查找】
|
算法 C语言
这就是二分查找?
本文通过简单的猜数字小游戏向大家介绍二分查找的基本原理。
120 2