关于二分查找法(Java)

二分查找法是将一个有序数组平均分成两份,将其中间数和对应要查找的值进行比较;

例如现在我们将数组中最小的元素的下标设置为min

最大的元素的下标设置max

中间的元素下标mid=(max-min)/2+min

然后用预期要找的值value去进行对比

如果预期值比下标为mid的元素的值要大,则调整min的值为mid+1

如果预期值比下标为mid的元素的值要小,则调整max的值为mid-1

然后均需要重新计算mid值

直到min>max之前一直进行比较,直到找到对应的value值,并输出其下标 

public class ArrayTools {
    public int  binarySearch(int[]  arr,  int  value){
        //二分查找法,要定义mid,max,min
        int min=0;
        int max=arr.length-1;
//        int mid=(min+max)/2; //该种写法可能会导致值的溢出,所以采用下面的写法会更好
        int mid=(max-min)/2+min;
        //由于不知道需要进行多少次循环,应使用while循环
        while (max>min){//此处需要大于等于,避免只有两个元素时直接出现BUG
            //二分查找的前提是数组是有序的
            if (value<arr[mid]){
                //大了,调整max值和mid值
                max=mid-1;
                mid=(min+max)/2;
            }else if(value>arr[mid]){
                //小了。调整min值和mid值
                min=mid+1;
                mid=(min+max)/2;
            }else {
                return mid;
            }
        }
        return -1;
    }

 

  

posted @ 2022-08-29 19:31  我吃大西瓜  阅读(62)  评论(0编辑  收藏  举报