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

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

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

- LeetCode中一个二分查找为例。
10-java算法学习之五(二分查找)_第1张图片
用二分查找实现代码如下:

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,即找到目标数。

你可能感兴趣的:(java算法学习,算法,leetcode,数据结构,二分法)