Java 基础 快速掌握2分法查找

一、概述

2分法查找是一种查找算法,它的优点是:
1、比较的次数少
2、查找的速度快
3、平均性能好
有个缺点是:
1、查找的列表必须要是 有序

二、思路

1、在给出的有序排列的数组中,把 目标值数组中间值 进行比较
2、如果相等,则返回中间值下标
3、如果目标值 小于 中间值,就从数组的 前半段 再次执行二分法查找
4、如果目标值 大于 中间值,从数组的 后半段 开始二分法查找

二、实现

public class MathUtils {

    public static void main(String[] args) {
        //有序排列数组(大到小,小到大无所谓)
        int[] array = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
        //打印二分法的返回值
        System.out.println(findRecursive(array, 0, array.length - 1, 9));
    }

    /**
     * 递归查找-2分法
     *
     * @param array     需要查找的数组
     * @param start     开始位置
     * @param end       结束位置
     * @param findValue 要查找的数据
     * @return
     */
    public static int findRecursive(int[] array, int start, int end, int findValue) {

        if (array == null) {
            return -1;
        }
        if (start <= end) {
            //中间位置
            int middle = (start + end) / 2;
            //中值
            int middleValue = array[middle];

            if (findValue == middleValue) {
                //与中值相等就直接返回
                return middle;
            } else if (findValue < middleValue) {
                //目标值小于中值,在中值前面找(这里调用了二分法的方法)
                return findRecursive(array, start, middle - 1, findValue);
            } else {
                //目标值大于中值,在中值后面找(这里调用了二分法的方法)
                return findRecursive(array, middle + 1, end, findValue);
            }

        } else {
            //返回-1,查找失败
            return -1;
        }
    }
}

OK,非常简单的2分法查找,就简单介绍到这里,不要纠结算法的实现过程.很痛苦,知道特点能灵活运用即可!
谢谢大家参考!

你可能感兴趣的:(java)