10-java算法学习之五(二分查找)

半窗疏影,一梦千年,琴歌萧萧笛声怜

二分查找有一个必须条件,就是数组是有顺序的,可以从小到大,也可以从大到小。
二分查找虽然有时候查找效率比不上其他查找算法,但是总体上看来,二分查找还是一种比较简单而且效率比较高的查找算法。

- LeetCode中一个二分查找为例。
在这里插入图片描述
用二分查找实现代码如下:

class Solution {
    public int search(int[] nums, int target) {
        if((nums.length==1)&&(target==nums[0]))return 0;
        int left=0;
        int rigth=nums.length-1;
        while(left<=rigth){
            int minIndex=(left+rigth)/2;
            int minValue=nums[minIndex];
            if(minValue<target){
                left=minIndex+1;
            }else if(minValue>target){
                rigth=minIndex-1;
            }else{
                return minIndex;
            }
        }
        return -1;
    }
}

二分查找最重要的是找中间值minValue,使之与目标值作比较。步骤一般如下:

  1. 定义左右“指针”,一个指向开头:left,一个指向尾部:right。
  2. 定义一个循环体,当left小于等于right时进行循环。因为当left大于right时,说明不存在要找的值,就可以终止循环了。
  3. 查找值和当前数组的minValue比较。查找值大于minValue就让left等于minValue+1,范围缩小一半。
  4. 查找值和当前数组的minValue比较。查找值小于minValue就让right等于minValue-1,范围缩小一半。
  5. 当查找值等于minValue,即找到目标数。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值