二分查找法

前提 有序数组:

可以利用 Arrays.sort(arr) 实现数组有序

思 路:

1. 数据得有序Arrays.sort(arr)

2. 定义最小索引 int min=0 和最大索引 int max=arr.length-1

3. 当 最小索引 < = 最大索引 时,通过while循环    

        3.1 定义中间索引 int mid=(max-min)/2+min;

        3.2  通过 if 条件判断 arr[mid] 和 给定数字 x 的大小

                3.2.1  如果 arr[mid] == x return mid ;

                3.2.2  如果 x > arr[mid] 向右查,min=mid+1;

                3.2.3 如果 x < arr[mid] ,  向左查,max =mid-1;      

4. 如果在数组中没有找到这个x,则 return -1;

    /**
     * @param arr  数组
     * @param x   要查询的数字
     * @return  数字在数组中的索引 (没有查到则返回-1)
     */
    private static int binarySearch(int []arr,int x){
        //1.分别定义 最小、最大和中间的索引位置
        int min=0;
        int max=arr.length-1;
        //2.当low<=high时,循环将 arr[mid]和a 大小比较
        while (min<=max){
            int mid=(max-min)/2+min; //中间位置   mid=(high+min)/2=high/2+min/2-min/2+min/2=(high-min)/2+min
            if (arr[mid]==x){
                return mid;
            }else if(x>arr[mid]){ //向右查找
                min=mid+1;
            }else {           //向左查找
                max=mid-1;
            }
        }
        return -1;
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值