简单的二分分C++

二分法,即二分搜索法,是通过不断缩小解可能存在的范围,从而求得问题最优解的方法。例如,如果一个序列是有序的,那么可以通过二分的方法快速找到所需要查找的元素,相比线性搜索要快不少。此外二分法还能高效的解决一些单调性判定的问题。二分法的时间复杂度为O(logn)。

动画实现

在这里插入图片描述

整数的二分法的模板代码如下

int find(int x)
{
    int l = 1 ,r = n + 1;
    while(l < r)
    {
        int mid = (l + r)/ 2;  //防止溢出
        if(a[mid] >= x)
            r = mid;  //小于中间的数,在左区间
        else
            l = mid + 1;  //大于中间的数,在右区间
    }
    if(a[l] == x)
        return l;
    if(a[l] != x)
        return -1;
}

还有浮点二分:

比如找一个数的n次方根

这是一个开3次方根的代码

#include 
#include 
#include 
#include 
#include
using namespace std;
int main()
{
    double n;
    cin>>n;
    double l=-1e5,r=1e5;
    while(r-l>1e-8){
        double mid=(l+r)/2;
        if(mid*mid*mid>=n) r=mid;
        else l=mid;
    }
   cout<

你可能感兴趣的:(STL,算法)