二、二分查找

因为我们初始化 right = nums.length - 1
所以决定了我们的「搜索区间」是 [left, right]
所以决定了 while (left <= right)
同时也决定了 left = mid+1 和 right = mid-1

因为我们只需找到一个 target 的索引即可
所以当 nums[mid] == target 时可以立即返回

/**
 * 二分查找
 */
public class erFen {
    private static final String TAG = "erFen";
    public static  void main(String[] args){
        int[] array = new int[100];
        for(int i=0; i<100;i++){
            array[i] = i;
        }
        System.out.println(binarySearch(array, 31));
    }

    private static int binarySearch(int[] array, int target){
        int start=0;//最小下标
        int end=array.length-1;//最大下标
        int mid;//中间下标
        while (start<=end){
//            mid=start+(end-start)/2;
            mid=(end+start)/2; //折半下标
            if (target>array[mid]){//关键字比折半值大,则最小下标调成折半下标的下一位
                start=mid+1;
            }else if (target<array[mid]){//关键字比折半值小,则最大下标调成折半下标的前一位
                end=mid-1;
            }else {
             return mid;
            }
        }
        return -1;
    }
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容