二分查找 最好理解的版本


第一种方法通过递归来实现改变,利用判断条件和mid修改start和end


第二种方法是通过普通循环来实现,利用一个while来进行判断,通过mid修改start和end

总而言之  :数组的长度-1和0除以2就是第一个mid 然后改变start和end最后不断的按照原来的大于小于逻辑缩减范围就能取到该值或者返回-1 没有这个值

package com.bj58.finance.blp.task.config;

public class A {
    public static void main(String[] args) {
        int srcArray[] = {3,5,11,17,21,23,28,30,32,50,64,78,81,95,101};
        System.out.println(binSearch(srcArray, 0, srcArray.length - 1, 95));
    }
    // 二分查找递归实现
    public  static  int binSearch(int srcArray[],int start,int end,int key){
        int mid=(end-start)/2+start;
        if(srcArray[mid]==key){
            return  mid;
        }if(start>=end){
            return  -1;
        }else if(key>srcArray[mid]){
            return binSearch(srcArray,mid+1,end,key);
        }else if (key<srcArray[mid]){
            return  binSearch(srcArray,start,mid-1,key);
        }
            return -1;
    }

    // 二分查找普通循环实现
     public static int  binSearch(int srcArray[],int key){
        int mid=srcArray.length/2;
        if(key==srcArray[mid]){
            return  mid;
        }
        int start=0;
        int end=srcArray.length-1;
        while (start<=end){
            mid = (end -start)/2+start;
            if(key<srcArray[mid]){
                 end=mid-1;
            }if(key>srcArray[mid]){
                  start=mid+1;
            }else {
                return  mid;
            }
        }
        return  -1;
     }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值