java二分查找

二分查找是一种在已排序数组中高效查找特定元素的算法。它通过不断将搜索范围折半来减少比较次数,从而提高查找效率。在给定的示例中,从数组[5,10,20,40,80,150,600,700,960]中查找10,通过比较中间元素并调整搜索边界,最终找到目标值。当未找到目标时,返回-1。二分查找的前提是数据必须先排序。
摘要由CSDN通过智能技术生成

二分法检索(binary search)又称折半检索。

为什么要使用二分查找呢?

        通常我们比较的话是一个一个的去比较,如果运气好,那么第一次就找到了, 如果运气不好数据量也很大, 那么就需要浪费很多的时间, 如果是二分查找的话, 每次查找我们可以折半寻找, 第一次找不到就判断比中间数大还是小, 然后再次折半...再次折半, 直到找到, 这样子的话我们就可以提高我们的查找效率

二分查找的思想

注意: 二分查找前需要排序好数组 !!!

比如数组 [5,10,20,40,80,150,600,700,960] 中要查找10这个元素

1. 我们要从这个数组里面找到中间数, 现在中间数是 80

2. 那么10跟80 比较一下, 如果比 80 小,那么就往左边找, 否则从右边找

3. 现在从80左边的数组里面找[5,10,20,40,80] 找到中间数 20

4.重复2步骤用10与20比较

5. 重复以上步骤, 如果找到最后两个元素不能再折半了, 那么就逐个进行比较.

 public static int binarySearch(int[ ] array, int value){
        int low = 0;
        int high = array.length - 1;
        while(low <= high){
            int middle = (low + high) / 2;
            if(value == array[middle]){
                return middle;          //返回查询到的索引位置
            }
            if(value > array[middle]){
                low = middle + 1;
            }
            if(value < array[middle]){
                high = middle - 1;
            }
        }
        return -1;      //上面循环完毕,说明未找到,返回-1
    }

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值