数据结构与算法C++之二分查找法

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/majinlei121/article/details/84103683

二叉搜索树一个很广泛的应用是查找问题
解决查找问题的一个基本解法是二分查找法 Binary Search
对于有序数列,才能使用二分查找法
在这里插入图片描述
如上图所示,首先找到数列的中间元素,如果等于要查找的元素,查找就停止,
如果不等于,判断是大于中间元素还是小于中间元素,大于的话就对右边数列继续切分查找,
如果小于就对左边数列继续切分查找,直到中间位置的元素等于查找元素位置
下面是程序实现

#include <iostream>
using namespace std;

//二分查找法,在有序数组arr中,查找target
//如果找到target,返回相应的索引index
//如果没有找到target,返回-1
template<typename T>
int binarySearch(T arr[], int n, T target){

    //在arr[l...r]中查找target
    int l = 0;
    int r = n - 1;
    while (l <= r){
            
        mid = l + (r - l)/2; //防止数组越界,不使用(l+r)/2
        if (arr[mid] == target)
            return mid;
        if (arr[mid] < target)
            //在arr[mid+1...r]中查找target
            l = mid + 1;
        else // arr[mid] > target
            //在arr[l...mid-1]中查找target
            r = mid - 1;
    }
    return -1;
}

int main()
{
    return 0;
}

猜你喜欢

转载自blog.csdn.net/majinlei121/article/details/84103683