java实现二分查找

二分查找的简单用法

1,二分查找的思想

二分查找是一种高效的查找算法。它比顺序查找快的多,虽然它需要的条件是数组是有序的。
在查找时,我们先将被查找的数和数组的中间键比较,因为数组是有序的,所有若被查找的数小于数组的中间键则这个数只可能在数组的左部分,然后将中间键的左边数组当作一个数组来进行二分查找。反之,则在数组的右部分,同样将右部分的数组当作一个数组来进行二分查找。若相等,则命中。

2,二分查找的两种实现方法

1,循环实现二分查找

//循环实现二分查找
    public static  int rank(int key,int[] arr){
        int lo=0;
        int hi=arr.length-1;
        //中间数的下标
        int mid=(lo+hi)/2;
        while(lo<=hi){   //退出循环的条件  若一直没找到这个数,则会退出循环
            if(arr[mid]==key) return arr[mid]; //数组中间的数正好是被查找的数直接返回
            else if(arr[mid]<key){
                lo=mid+1; //若小于被查找的数 则证明被查找的数只可能在数组右部分,则将右部分的数组重新进行一次二分查找
            }else{
                hi=mid-1;//同理
            }
            mid=(lo+hi)/2;
        }
        return -1;
    }

2,递归实现二分查找

//递归实现二分查找
    public static int rank(int key,int[] arr,int lo,int hi){
        if(lo>hi)return -1;
        int mid=(lo+hi)/2;
        if(arr[mid]==key) return arr[mid];
        else if(arr[mid]<key){
            return rank(key,arr,mid+1,hi);
        }else{
            return rank(key,arr,lo,mid-1);
        }

    }

3,二分查找的时间复杂度

对于一个大小为N的数组,如果是顺序查找,时间复杂度为O(N)。如果是二分查找,时间复杂度为O(logN)。所以对N很大的数组,对于随机查找的数,二分查找的效率要远远高于顺序查找

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值