二分查找算法---java----黑马程序员算法

发布时间 2023-12-30 14:47:57作者: 无名之辈的ggb

1.二分查找算法

给定的条件:给定的有序数组A查找目标值为target,其中A标记为

 数组序号从0开始,其下标最大为数组长度-1.

举例数组:5   14   22  30  31   41  44

条件:i>j   i表示左边下标     j表示右边下标     i从5开始      j  从44开始

思想:每次计算其中间下标的值和target值进行对比,分为以下三种情况

middle=(i+j)>>>2      表示右边移一位

target<a[middle]     j=m-1

a[middle]<target     i=m+1

target=a[middle]     结束查找找到了

 

public class Main {
    public static void main(String[] args) {
        int[] a = {5,14,22,30,31,41,44};
        System.out.println(binarySearchBasic(a,5));
        System.out.println(binarySearchBasic(a,44));
    
        int i=0;
        int j= Integer.MAX_VALUE-1;//求出最大下标
        System.out.println("索引值:i="+i);
        System.out.println("索引值:j="+j);
        int m = (i+j)/2;
        System.out.println("索引值:(m+j)/2="+(m+j)/2);
    }
    //实现二分查找
    public static int binarySearchBasic(int[] a,int target){
        //二分查找基础版本  a待查找的有序数组  target目标值
        //找得到返回索引   找不到返回-1
        int left = 0;
        int right = a.length-1;
        while(left<=right){
         int middle = (left+right)/2;
            if(a[middle]<target){
                left = middle+1;
            }else if(target<a[middle]){
                right = middle-1;
            }else{
                return middle;
            }
        }
        return -1;//没有找到返回为-1
    }
}