Binary Search

Binary Search 模版

四种结构

    public static int BinarySearch(int[] array, int target){
        int left = 0;
        int right = array.length - 1;
        int mid = left + (right - left) / 2;
        while(left <= right){
            mid = left + (right - left) / 2;
            if(array[mid] > target){
                right = mid - 1;
            } 
            else
                left = mid + 1;
        }
        return right;
    } // rightyes + noleft
    
    
    public static int BinarySearchLeft(int[] array, int target){
        int left = 0;
        int right = array.length - 1;
        int mid = left + (right - left) / 2;
        while(left <= right){
            mid = left + (right - left) / 2;
            if(array[mid] < target){
                left = mid + 1;
            } 
            else
                right = mid - 1;
        }
        return left;
    } //leftyes rightNo
    
    //    recursive
    public static int RecursiveBinarySearchLeft(int[] array, int target, int left, int right){
        if(left > right){
            return left;
        }
        int mid = (left +  right) / 2;
        if(target > array[mid])
            return RecursiveBinarySearchLeft(array, target, mid + 1, right);
        else
            return  RecursiveBinarySearchLeft(array, target, left, mid - 1);
    }
    
    public static int RecursiveBinarySearchRight(int[] array, int target, int left, int right){
        if(left >= right){
            return right;
        }
        int mid = (left +  right) / 2;
        if(target < array[mid])
            return  RecursiveBinarySearchLeft(array, target, left, mid - 1);
        else
            return RecursiveBinarySearchLeft(array, target, mid + 1, right);
            
    }
原文地址:https://www.cnblogs.com/joannacode/p/5926803.html