二分查找算法

博客以猜数字游戏引入二分法思想,介绍了二分查找算法。对于有序数组,通过比较中间位置关键字与查找关键字,不断缩小查找范围,直到找到目标或子表不存在。还给出代码示例,提醒数组排序顺序对代码的影响,并提出拓展思考问题。

相信各位都玩过一个游戏:在一定区间内,乙方来猜数字,甲方每次只说甲方所述数字比目标数字时大还是小,来让乙方最终找到最后的数字,没错,这个就是典型的二分法思想题目,相信各位都知道解法这里就不多阐述了

二分查找算法

对于一个有序数组或序列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。

描述起来确实不那么易懂,但只要知道和上述找数的游戏一个思想便很容易就能理解,接下来上代码:

public static int BinarySearchForArray(int[] array,int target){
        if (array.length<=0){
            return -1;
        }
        if (array[array.length-1]<target||array[0]>target){
            return -1;
        }
        //2.进行二分查找
        int left=0;//设置初始化的左下标,指向数组第一个元素下标
        int right=array.length-1;//设置初始化的有下标,只想数组最后一个元素下标
        int mid=0;  //数组的中间下标
        while (left<=right){
            mid=(left+right)/2;
            if (array[mid]<target){
                left=mid+1;
            }else if (array[mid]>target){
                right=mid-1;
            }else if (array[mid]==target){
                return mid;
            }
        }
        return -1;
    }

这里若在数组内找不到则返回-1,否则便会返回目标数的下标
注意:此代码中array数组是从小到大排序的,若是从大到小则代码会有所不同,大家可以思考思考若从大到小排序的数组怎么实现二分查找算法

相信到这里大家对二分查找算法有了一定了解,这里可以思考一下若数组中有多个元素都与target相同,那么怎么将它们的下标以数组的形式返回出来呢?

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值