二分查找法

297 阅读1分钟

java基础巩固:二分查找法原理理解

概述

“二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法, 但是二分查找的前提是查找的数组是有序的


二分查找原理

  • ① 找到数组最大索引、最小索引、中间索引

  • ② 取中间索引位置的数据和查询的数据进行比较,相等则直接返回中间索引

  • ③ 如果中间索引位置的数据更大,说明查询的数据在中间索引的左边 此时,最大索引等于上一次中间索引-1重新计算中间索引

  • ④ 如果中间索引位置的数据更小,说明查询的数据在中间索引的右边 此时,最小索引等于上一次中间索引+1重新计算中间索引

  • ⑤ 最后当最小索引大于最大索引时,表示查找完毕


代码实现

注意:二分查找返回的索引值表示的是找到的第一个值的索引值

public class App
{
    public static void main( String[] args )
    {
        int[] arr = {1,2,3,4,5,6,7,8};
        int index = binSearch(arr, 1);
        System.out.println(index);
    }

    public static int binSearch(int[] arr,int param){
        //获取最大索引
        int maxIndex = arr.length-1;
        //获取最小索引
        int minIndex = 0;
        //计算中间索引
        int halfIndex = (maxIndex + minIndex)/2;

        while (maxIndex >= minIndex){
            if(arr[halfIndex] == param){
                //中间索引处数组值等于查找的数,直接返回中间索引
                return halfIndex;
            }else if(arr[halfIndex] > param){
                //中间索引处数组值大于查找的数,表示查找的值在中间索引左边
                maxIndex = halfIndex - 1;
            }else{
                //中间索引处数组值小于查找的数,表示查找的值在中间索引的右边
                minIndex = halfIndex + 1;
            }
            //重新计算中间索引
            halfIndex = (maxIndex + minIndex)/2;
        }
        //没有找到返回-1
        return -1;
    }

}