java 二分查找法 递归法

因为每次都将搜索范围变为原来的二分之一,当范围长度被缩短为1的时候,就完成了查找。所以二分查找法的时间复杂度为O(logN)。

如果一个算法用常数时间(O(1))将问题的大小削减为其一部分(通常是1/2),那么该算法就是(O(logN))。

2^x = N    所以x=log2N。

代码如下

 public static int binarySearch() {
       int a[] = {1,3,2,8,4,5,9,6,7};
       int x = 5;
       Arrays.sort(a);

       int begin = 0;
       int end = a.length-1;
       while (begin<=end){
           int mid = (begin + end)/2;
           if (a[mid]==x){
               return mid;
           }
           if (a[mid]>x){
               end = mid - 1;
           }
           if (a[mid]<x){
               begin = mid + 1;
           }

       }
       //找不到返回-1
       return -1;
    }

二分查找的递归法

public static int binarySearch2(int a[],int target,int begin,int end){
        Arrays.sort(a);
        int mid = (begin+end)/2;
        //遇到错误情况返回-1
        if (target < a[begin] || target >a[end] || begin > end){
            return -1;
        }
        //找到返回目标索引
        if (a[mid] == target){
            return mid;
        }else if (a[mid] > target){
            return binarySearch2(a,target,begin,mid);
        }else {
            return binarySearch2(a,target,mid,end);
        }
    }

猜你喜欢

转载自blog.csdn.net/wanderlustlee/article/details/79686109