算法系列-二分查找(JAVA版)

  1. 简介
  2. 二分查找JAVA实现

简介

记录自己的学习的算法

算法图解云:

二分查找是一种算法,其输入是一个有序的元素列表(必须是有序的),如果查找的元素包含在列表中,二分查找返回其位置,否则返回NULL
二分查找符合我们的生活习惯,就比如假设要在电话簿中找一个名字以K打头的人,(现在谁还用电话簿!)可以从头开始翻页,直到进入以K打头的部分。但你很可能不这样做,而是从中间开始,因为你知道以K打头的名字在电话簿中间

二分查找JAVA实现

    /**
     * 二分查找非递归实现
     *
     * @param list  有序数组
     * @param value 查找的值
     * @return java.lang.Integer
     * @author cuishilei
     * @date 2019/7/9
     */
    private static Integer binarySearch(int[] list, int value) {
        int low = 0;
        int high = list.length - 1;

        //如果前后索引没有“相遇”,则继续二分
        while (low <= high) {
            //得到“中间值”的索引
            int mid = (low + high) / 2;
            //中间值
            int hitValue = list[mid];
            //直接命中
            if (hitValue == value) {
                return mid;
            }
            //如果中间值大于 value ,则 value 在前半段
            if (hitValue > value) {
                high = mid - 1;
            } else {//否则 value 在后半段
                low = mid + 1;
            }
        }
        return null;
    }

    /**
     * 二分查找递归实现
     *
     * @param list  有序数组
     * @param low   分区前
     * @param high
     * @param value
     * @return java.lang.Integer
     * @author cuishilei
     * @date 2019/7/9
     */
    private static Integer binarySearch(int[] list, int low, int high, int value) {
        if (low <= high) {
            //得到“中间值”的索引
            int mid = (low + high) / 2;
            //中间值
            int hitValue = list[mid];
            //直接命中
            if (hitValue == value) {
                return mid;
            }
            //如果中间值大于 value ,则 value 在前半段
            if (hitValue > value) {
                return binarySearch(list, low, mid - 1, value);
            } else {//否则 value 在后半段
                return binarySearch(list, mid + 1, high, value);
            }
        }
        return null;
    }

    public static void main(String[] args) {
        int[] list = {1, 4, 6, 9, 22};

        System.out.println(binarySearch(list, 6));
        System.out.println(binarySearch(list, 0, list.length - 1, 6));
    }

转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 rockeycui@163.com

文章标题:算法系列-二分查找(JAVA版)

文章字数:453

本文作者:崔石磊(RockeyCui)

发布时间:2018-08-18, 18:00:00

原始链接:https://cuishilei.com/算法系列-二分查找-JAVA.html

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。

目录
×

喜欢就点赞,疼爱就打赏