基本搜索算法 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数值
返回中间索引

京公网安备 11010502036488号