升序数组,升序旋转数组的二分查找法

注意: 以下算法的实现,是在数组都是升序的情况下讨论的

 public static void main(String[] args) {
        int [] arr1=new int[]{1,3,21,45,67,77,89,90};
        int target=22;
        int i = binarySearch(arr1,target);
        System.out.println(target+"的位置是:"+i);

        int [] arr2=new int[]{45,67,77,89,90,1,3,21,45};
         target=67;
        i=rotatedBinarySearch(arr2,target);
        System.out.println(target+"的位置是:"+i);
    }

    /**
     * 对于一个升序数组,使用循环在目标数组中查找
     * @param arr 查找的目标数组
     * @param target 目标值
     * @return 返回target在arr中的目标位置,-1为不存在
     */
    public static int binarySearch(int[] arr, int target){
        int start=0,end=arr.length-1;
        //使用小于等于才能完成最后一次的比较
        while (start<=end){
            //采用这样的计算方式,来避免数据过大的溢出问题
            int mid=start+(end-start)/2;

            if(arr[mid]==target){
                return mid;
            }else if(arr[mid]=arr[start]){
                //旋转点在中位数右侧
                if(arr[start]<=target&& target

更多关于旋转数组的图解思路可参考:https://mp.weixin.qq.com/s?__biz=MzIxMjE5MTE1Nw==&mid=2653198327&idx=1&sn=74187f72a03db8fcad3c234d61c7bad7&chksm=8c99e52dbbee6c3b1e35ea8b2a8d57fa9fa72c098fa91e9f76a3228596922ef062fbf6f3e103&mpshare=1&scene=23&srcid=0722czhsZ9KdxVNzxZfnppvG#rd

你可能感兴趣的:(算法与数据结构)