二分查找

二分查找(又称为折半查找)是在有序序列中查找比较多的查找算法,基本思路:假设有一个从小到大的序列,取中间的元素m进行比较,如果等于需要查找的元素x则返回元素m的下标,若x大于m则再从右边的区间查找,若x小于m则再从左边的区间查找,这样每次减少一半的查找范围。时间复杂度为O(lgn),查找速度相对顺序查找要快很多,但是查找的数据序列必须是有序序列(即数据是从小到大或从大到小排序的)。
所以二分查找有个必须前提: 源数据必须是有序序列。
二分查找必须设计为左闭右开的原则,就像数学上的区间[0 , 1),这样才会保证各个区间之间不会出现断层的现象。

//数组在fromIndex和toIndex之间有没有key这个值 并返回下标
public static int binarySearch(int[] array,int fromIndex,int toIndex,int key){
    int low = fromIndex;
    int high = toIndex -1;    //右开区间的体现
    while(low < high){
        int middle = (low+high)/2;  //等价于(low+high)>>>1  无符号除以2
        if(key > array[middle]){
            low = middle + 1;
        }else if(key < array[middle]){
            high = middle - 1;
        }else{
            return middle;
        }
    }
    return -1;
}

二分查找应用场景:
源数据采用的是顺序存储结构并且数据是有序序列的时候采用二分查找,二分查找不推荐使用递归算法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值