基本搜索算法 Binarysearch

输入输出描述

要求在有序数组A里,查找数值target

如果找到就返回索引 找不到返回-1

二分查找的算法基础版基本思路

首先确定两个指针 i j

设置指针和初值

i指向0 索引 j指向n-1索引

以规定范围

再执行中间值和目标值比较的逻辑

用循环实现 while(i<=j)

取到中间索引 再java里两个int(整数)相除自动取整

再判断

目标值小于中间值 j向左移动

目标值大于中间值 i向右移动

目标值等于中间值 返回索引 即为中间索引

代码实现

import java.util.Scanner;

public class Main {
    //简易版的二分查找法
    public static int[] arr =new int[]{1,2,3,4,5,6,7,8,9};
    public static void main(String[] args) {
        Scanner Dduo=new Scanner(System.in);
        System.out.println("请输入要查找的目标值");
        int target=Dduo.nextInt();
        if(Binarysearch(arr,arr.length,target)==-1)
            System.out.println("数组中不存在目标值");
        else
            System.out.println("目标值"+target+"的索引为"+Binarysearch(arr,arr.length,target));
    }
    public static int Binarysearch(int arr[],int n,int target){
        //初始化查找指针
        int i=0,j=n-1;
        //通过循环不断执行中间值和目标值比较的逻辑
        while(i<=j){
            //取到中间索引
            int m=(i+j)/2;
            //目标再左边
            if(target<arr[m])
                j=m-1;
            //目标再右边
            else if(target>arr[m])
                i=m+1;
            //找到了
            else return m;
        }
        return -1;
    }
}

小结

要注意目标值和中间索引对应的值比较时,是比较的大于还是小于

千千万万要考虑等于号

可以总结为三种情况

目标值大于中间索引所对应的数值 更新i数值

目标值小于中间索引所对应的数值 更新j数值

返回中间索引