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

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

#include 
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;
}

你可能感兴趣的:(数据结构与算法)