Java中的二分查找算法

面试题回顾(我的逻辑很差)

面试题中常常见到二分查找,特此来回顾一下二分查找算法
来巩固一下算法,以下是个人思想的注释

public class BinarySearch2 {
    public static void main(String[] args) {
        int[] arr = {2,3,6,18,22,34,66,77,88,99};
        System.out.println(findNum(arr,99));
    }

    /**
     *
     * @param arr 要查找数的数组
     * @param key 要查找的参数
     * @return 
     */
    public static int findNum(int[] arr,int key){
        int mid = arr.length/2;//下标中间值
        if(arr[mid]==key){//如果中间下标的这个数组的值和这个key相等的话,就返回这个下标
            return mid;
        }
        //else就重新来过,进行下标的重新划分,看看这个数字是比中间大还是中间小,大了到右边,小了到左边
        int start = 0;
        int end = arr.length-1;
        while(start<=end){  //循环条件  这个数组的开始和结束如果一直不重合的话就进行循环一直进行 比较
            //重新去取中间值
            mid = (end-start)/2+start;//这是重新计算的中间值下标
            //如果这个重新划分的中间值和这个key相等的话,就说明找到了,就可以退出循环
            if(arr[mid]==key){
                return mid;
            }else if(arr[mid]>key){
                end  =  mid - 1;//中间到末尾段的二分段
            }else{
                start = start+1;//开始到中间段的二分段
            }
        }
        return -1;
    }
}

猜你喜欢

转载自blog.csdn.net/qq_37384795/article/details/85056682
今日推荐