二分查找--Java(注释详细)

public static void main(String[] args)
    {
        int[] arr = {1,2,3,4,5,6,7,8,9,10};

        System.out.println("查找总次数:"+  halfFind(arr, 12));
        System.out.println("查找总次数:"+  halfFind(arr, 10));
        System.out.println("查找总次数:"+  halfFind(arr, 5));
        System.out.println("查找总次数:"+  halfFind(arr, 3));
    }

    static int halfFind(int[] arr, int target)
    {
        int max = arr.length - 1;  //最大数组下标
        int min = 0;               //最小数组下标

        boolean flag = false;        //标志是否查找到
        int counte = 0;            //计数器
        while(max >= min) //移动最大最小下标,直到最大下标与最小下标相遇
        {
            int mid = (max+min)/2;     //数组中间下标,会根据二分法判断出的位置改变
            //如果目标值大于二分法的中间值,说明在数组右边,min就从mid的位置开始
            if(target > arr[mid])
            {
                min = mid + 1;        //第一次:mid==4, 已经知道mid不等于target了,所以以mid+1作为最小下标
            }
            //否则就是在数组左边,就移动max的位置
            else if(target < arr[mid])
            {
                max = mid - 1;       //max和min同理
            }
            else if(target == arr[mid])
            {
                System.out.println("查找到对应target:"+arr[mid]);
                flag = true;
                break;
            }

            System.out.println(arr[mid]);
            counte++;
        }
        //如果没有查找到数据
        if(!flag)
        {
            System.out.println("没有查找到对应数据");
        }

        return counte;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值