java二分查找法的实现过程

首先,我们实现如下需求:在数组中查找一个数字,返回该数字在数组中的索引值,否则返回-1;代码如下

    public static void main(String args[]){
        int[] arr = {1,2,3,4,5,6,7};                    //定义数组arr
        int index = searchEle(arr,6);               //调用方法searchEle,并传递参数arr和要找的数字6
        System.out.println("元素所在索引为: "+index);    
        
    }
    public static int searchEle(int[] arr,int tag ){           //定义方法,返回值为int
        for(int i = 0;i<arr.length;i++){ 
            if(arr[i] == tag){
                return i;
            }
        }
        return -1;
    }
}

要找的元素为6,其索引值为5;我们不难发现要找到这个数字,在数组中要经过6次比较才找到。我们不妨换一种思路:

在一个有序的数组中,我们定义三个变量表示最小索引值,最大索引值和中间的索引值,然后将目标数字与中间的数字进行比较,不断缩短查找范围(注意的是,这只适用于有序的情况)

public static void main(String args[]){
        int[] arr = {1,2,3,4,5,6,7};
        int index = halfSearch(arr,1);
        System.out.println("索引值为: "+index);
        
    }
    public static int halfSearch(int[] arr,int target){
        //定义三个变量表示最小,最大,中间的表示范围
        int max = arr.length-1;
        int min = 0;
        while(min<=max){
            int mid = (max+min)/2;
            if(target==arr[mid]){
                return mid;
            }else if(target<arr[mid]){
                max = mid-1;
            }else{
                min = mid+1;
            }
        }
                return -1;    
    }
    
原文地址:https://www.cnblogs.com/zflovezk9/p/8316447.html