【详解】二分查找改良版(内含java实现)

本文介绍了二分查找改良版算法的实现,通过平衡左右指针,优化比较次数。尽管循环次数不受目标位置影响,但保留了一个有效值直到只剩最后一个。作者分析了其与传统二分查找方法的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

点击本链接先学习二分查找基础版

二分查找改良版算法思想

在这里插入图片描述

算法实现

public static int binarySearchBalance(int a[],int target) {

        int i=0,j=a.length;

        while(j-i>1) {
            int m=(i+j)>>>1;
            if(target<a[m]) {
                j=m;
            }
            else {      //包括a[m]<target和a[m]=target
                i=m;    //所以m不可以被排除了,i不能等于m+1
            }
        }
        if(a[i]==target){
            return i;
        }
        return -1;
    }

优缺点

优点:比较次数减少
缺点:无论目标值在数组的什么位置,循环的次数都不变,会一直运行直到j-i>1,即只剩余i这个位置的值有效之后退出

和之前的方法对比

为什么三种方法的循环条件不同

  • i和j都有效时,需要j>i退出循环,即已经没有任何有效的值,i=j时还有一个有效值
  • i有效,j无效时,需要j>=i退出循环
  • i有效,j无效但平衡版,需要留存一个有效值用于退出循环后和target比较,所以j-i>1,留出a[i]这个有效值
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值