美文网首页
二分查找算法( 递归&&非递归)java

二分查找算法( 递归&&非递归)java

作者: 进击的码农 | 来源:发表于2019-05-30 00:10 被阅读0次
一、二分查找概念:

所谓二分查找就是在一个有序的数组中要查找一个元素(target),首先将target与数组中间元素(mid)比较,如果相等,皆大欢喜;如果target>mid,说明target位于中间元素之后(因为大前提数组是有序的),即target在区间 [mid+1,end];如果target<mid,target在区间[0,mid-1],不断缩小查找范围,直到查找到target或查找完所有区间未找到为止,举例如下图:


二分查找.jpg
二、二分查找算法易错点

一定要注意边界条件,否则看似简单的代码很容易写出一手死循环!!!想看看花式犯错集锦??请戳这位老哥的文章:https://segmentfault.com/a/1190000011283470

三、二分查找算法java实现(递归、非递归)

终于要上代码了:

// 递归
public static boolean binarySearch(int[]arr, int n, int start, int end) {
        if(end <start) return false; //递归结束条件
        int mid = start + (end-start)/2; //避免start,end很大时(start+end)/2溢出
        if(arr[mid]==n) return true;
        else if(n<arr[mid]) return bs(arr,n,start,mid-1);
        else  return bs(arr,n,mid+1,end);
    }
//迭代
public static boolean binarySearch(int[]arr,int n,int start,int end) {
    while(start<=end) {
        int mid = start + (end-start)/2;
        if(arr[mid]==n) return true;
        else if(arr[mid]>n) end = mid-1;
        else start = mid + 1;
    }
    return false;
}

相关文章

网友评论

      本文标题:二分查找算法( 递归&&非递归)java

      本文链接:https://www.haomeiwen.com/subject/fddptctx.html