二分查找



package search;

public class BinarySearch {
    public static void main(String[] args){
        int[] data = {1,2,3,4,5,6,7,8,9,10};
        System.out.println(binarySearch(data,7,0,data.length-1));
    }
    //二分查找-迭代
    public static int binarySearch(int[] data,int key){
        int left = 0,right = data.length-1;
        while(left<=right){
            int mid = left+((right-left)>>1);
            if(data[mid]>key){
                right = mid-1;
            }else if(data[mid]<key){
                left=mid+1;
            }else{
                return mid;
            }
        }
        return -1;
    }

    //二分查找-递归
    public static int binarySearch(int[] data,int key,int left,int right){
        if(left>right){
            return -1;
        }
        int mid = left+((right-left)>>1);
        if(data[mid]>key){
            return binarySearch(data,key,left,mid-1);
        }else if(data[mid]<key){
            return binarySearch(data,key,mid+1,right);
        }else{
            return mid;
        }
    }
}