其他分享
首页 > 其他分享> > 二分

二分

作者:互联网

简介

二分查找(binary search),也称折半搜索(half-interval search),对数搜索(logarithmic search),是用来在一个有序数组中查找某一元素的算法。

时间复杂度O(log n)

工作原理

在一个有序数组中,每次考察中间的元素(\(\frac{l+r}{2}\)),根据当前元素是否满足题目要求,输出当前元素,在左半边区间查找或在右半边区间查找(三选一)。

在有序数组中查找目标元素


参考代码

// 有序数组为a[n]
// a[n]的元素个数为n
// 目标值为tar
// 假设目标值在数组中最多出现一次
int find(int tar){
    int l=0;//左界
    int r=n-1;//右界
    while(l<=r){
        int mid=(r-l)/2+l;//防止l+r的结果出界
        if(a[mid]==tar)return mid;//找到目标值
        if(a[mid]<tar)l=mid+1;//接下来在右半边查找
        else r=mid+1;//接下来在左半边查找
    }
    return -1;//没找到
}

细节处理

求解满足条件的最大(小)值

以最大值为例

一般情况下,由于数组是单调的,某个元素满足条件时,其左(右)边的所有元素都应该满足条件。
参考代码

int find(int tar){
    int l=0;//左界
    int r=n-1;//右界
    while(l<r){
        int mid=(r-l+1)/2+l;//防止l+r的结果出界
        if(check(mid))l=mid;//check()检验mid是否满足条件
        else r=mid-1;
    }
    return l;
}

细节处理

总结

二分的细节主要有两个。
1.判断条件(防止有数据没检验就跳出循环)
2.转移方式(避免死循环)

标签:二分,满足条件,int,元素,mid,数组,死循环
来源: https://www.cnblogs.com/hetailang/p/15865856.html