自学内容网 自学内容网

Acwing-基础算法课笔记之基础算法(二分)

一、二分查找的概念

1、使用二分的条件

1、必须是数组(顺序表)
2、必须有序

2、二分查找的算法流程

目标数:27

516202730364455606771
1234567891011

第一步:
需要定义两个变量,一个left,一个right,分别指向下标1和最后一个元素的下标11,确定查找的范围。
在这里插入图片描述

第二步:
取中间位置:mid=(left+right)/2,即mid=(1+11)/2=6
在这里插入图片描述
然后将27与mid下标所在的数做比较,如果27<a[mid],则将指针right更新,如果27>a[mid],则将指针left更新,最终找到目标数。

二、左闭右闭写法[left,right]

while(left <= right) {
mid = (left + right) / 2;
if(num[mid] > target)
right = mid - 1;
else if(num[mid] < target)
left = mid + 1;
else return mid;
}

三、左闭右开写法[left,right)

[1,1)

while(left < right) {
mid = (left + right) / 2;
if(num[mid] > target)
right = mid;
else if(num[mid] < target)
left = mid + 1;
else return mid;
}

四、浮点数的二分

bool check(double x) {/* ... */} // 检查x是否满足某种性质

double bsearch_3(double l, double r)
{
    const double eps = 1e-6;   // eps 表示精度,取决于题目对精度的要求
    while (r - l > eps)
    {
        double mid = (l + r) / 2;
        if (check(mid)) r = mid;
        else l = mid;
    }
    return l;
}

原文地址:https://blog.csdn.net/weixin_73381974/article/details/145268576

免责声明:本站文章内容转载自网络资源,如侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!