欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

二分查找的递归与非递归

程序员文章站 2022-03-14 22:55:46
...

二分查找介绍:
二分查找是分治策略应用最简单的实例,分治策略是将规模较大的问题分解成同类型规模较小的问题。二分查找是针对有序的序列查询,它可以有效降低时间复杂度。我们知道对有序或无序的序列查询,需要对该序列进行遍历,时间复杂度为O(n),而二分查找每次使数据量缩减一半,一直继续下去,所以二分查找的时间复杂度是O(log2n)。

二分查找过程:
二分查找的递归与非递归
算法实现:

//非递归循环实现
public static int BinarySearch(int[] a,int val){
    int pos = -1;
    int left = 0,right = a.length-1;
    while(left<=right){
        int mid = (right-left+1)/2+left;
        if(val<a[mid]){
            right = mid-1;
        }else if(val>a[mid]){
            left = mid+1;
        }else {
            pos = mid;
            break;
        }
    }
    return pos;
}
//递归实现
public static int BinarySearch(int[] a,int val,int i,int j){
    if(i>j || val<a[i] || val>a[j]){
        return -1;
    }else{
        int mid = (i+j)/2;
        if(a[mid]>val){
            return BinarySearch(a,val,i,mid-1);
        } else if(a[mid]<val){
            return BinarySearch(a,val,mid+1,j);
        }else{
            return mid;
        }
    }
}
相关标签: java 二分法