java 二分查找

Posted DQ_CODING

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 二分查找相关的知识,希望对你有一定的参考价值。

注意

二分查找要求原数组为有序序列,从小到大

递归解法

public class problem9 
    public static void main(String[] args) 
        int[] arr = 1,2,3,4,6,7;
        int left = 0;
        int right = arr.length - 1;
        int value = 2;
        System.out.println(Arrays.toString(arr));
        int index = binary(arr, left, right, value);
        System.out.println(index);
    
//递归解法
    public static int binary(int[] arr, int left, int right, int value) 
        if (left > right)
//没有找到就返回-1
            return -1;
//中间数的下标
/*1.(left+right)/2
* 2.(left + right) >>> 1:无符号右移1,相当于除以2
* */
        int midIndex=(left + right) >>> 1;
//中间数
        int middle = arr[midIndex];
        if (value > middle)
//如果比中间数大,就从中间数的右边进行查找
            return binary(arr, middle + 1, right, value);
        else if (value < middle)
//如果比中间数小,就从中间数的左边进行查找
            return binary(arr, left, middle - 1, value);
        else
//等于中间数,直接返回下标
            return midIndex;
    


非递归解法

public class problem9_1 
    public static void main(String[] args) 
        int[] arr = 1,2,3,4,6,7;
        int left = 0;
        int right = arr.length - 1;
        int value = 2;
        System.out.println(Arrays.toString(arr));
        int index = binary(arr, left, right, value);
        System.out.println(index);

    
    //非递归解法
    public static int binary(int[] arr, int left, int right, int value) 
        while (left<=right)
            int midIndex=(left+right)>>>1;
            int middle=arr[midIndex];
            if (value>middle)
                left=midIndex+1;
            else if (value<middle)
                 right=midIndex-1;
            else
                return midIndex;
        
        return -1;
    
    


以上是关于java 二分查找的主要内容,如果未能解决你的问题,请参考以下文章

面试100题:二分查找

二分查找的妙用:判定子序列

二分查找的实现

(二分查找)找一对数

二分查找算法

二分查找&好久不见