二分查找

 

 

 public static void main(String[] args) {
        // 数组中的元素必须是, 从小到大排序,
        int[] arr = {10, 20, 30, 40, 50, 60, 70, 80, 90};

        int target = 55;

        System.out.println(binarySearch(arr, target));
    }

    /**
     * 此方法用于二分查找
     * @param arr      数组
     * @param target   要找的目标值
     * @return   目标值所在的索引, 如果不存在返回-1
     */
    public static int binarySearch(int[] arr, int target) {

        // 开始索引
        int startIndex = 0;
        // 结束索引
        int endIndex = arr.length - 1;

        // 循环: 只要没找到, 还有希望存在, 就继续找
        // 结束索引  >=  开始索引
        while (endIndex >= startIndex) {
            // 计算中间索引
            int middleIndex = (startIndex + endIndex) / 2;
            // 比较
            if (arr[middleIndex] > target) {
                // 修改结束索引
                endIndex = middleIndex - 1;
            } else if (arr[middleIndex] < target) {
                // 修改开始索引
                startIndex = middleIndex + 1;
            } else {
                return middleIndex;
            }
        }
        // 如果循环结束, 说明循环判断的结果为false
        // 说明结束索引已经大于开始索引 => 找不到(target不存在)
        return -1;
    }

  

posted @ 2021-05-17 00:22  步江伍德  阅读(30)  评论(0)    收藏  举报