二分(折半)查找JAVA实现

描述

  • 一个有序数组中记录数组开始与结束位置
  • 每次取中间值(开始位置 + 结束位置)/ 2 索引的值 与查找目标值进行比较
  • 如果目标值小于 中间值(将结束位置索引替换为中间值位置索引),则在中间值左侧区间内继续查找
  • 如果目标值大于 中间值(将开始位置索引替换成(中间值 + 1)位置的索引),则在中间值右侧区间内继续查找
  • 如果 中间值 等于 目标值,则直接返回
  • 如果没有找到,则返回-1

实现

 public static void main(String[] args) {
        int[] arr = {1,2,3,4,5,6,7,8,9};
        int i = SortMain.binarySearch(arr, 10);
        System.out.println(i);
    }

    /**
     * 二分搜索
     *
     * @return
     */
    private static int binarySearch(int[] arr, int target) {
        // 遍历当前数组
        for (int i = 1; i < arr.length; i++) {
            int start = 0;
            int end = arr.length;

            while (start < end) {
                // 除二
                int mind = (start + end) >> 1;
                // 目标在左侧区间,则将end重新赋值
                if (target < arr[mind]) {
                    end = mind;
                }
                // 目标在右侧区间,将start赋值为 mind + 1
                else if (target > arr[mind]) {
                    start = mind + 1;
                }
                // 命中目标 直接返回
                else {
                    return mind;
                }
            }
        }
        // 没有找到
        return -1;
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值