惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Stack Overflow Blog
Stack Overflow Blog
J
Java Code Geeks
Last Week in AI
Last Week in AI
人人都是产品经理
人人都是产品经理
博客园 - 【当耐特】
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
C
Check Point Blog
月光博客
月光博客
腾讯CDC
Engineering at Meta
Engineering at Meta
博客园 - Franky
Vercel News
Vercel News
D
Docker
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
F
Fortinet All Blogs
Microsoft Security Blog
Microsoft Security Blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
雷峰网
雷峰网
Google DeepMind News
Google DeepMind News
Martin Fowler
Martin Fowler
GbyAI
GbyAI
B
Blog
Hugging Face - Blog
Hugging Face - Blog
T
Tailwind CSS Blog

faryou的博客

faryou的博客 faryou的博客 faryou的博客 faryou的博客 faryou的博客 faryou的博客-福建行小记 faryou的博客 faryou的博客 faryou的博客 faryou的博客 faryou的博客-夏令营小记 faryou的博客 faryou的博客 faryou的博客 faryou的博客-暑假阶段总结与展望 faryou的博客 faryou的博客 faryou的博客 faryou的博客 台风进行时 faryou的博客 limbo虚拟机初体验&安装Windows NT 4.0 faryou的博客 台风将来时 faryou的博客 faryou的博客 faryou的博客 faryou的博客 出租车上的对话 faryou的博客
【算法教程】【C/C++】二分查找——程序设计思路与代码实现
作者: faryou · 2024-06-01 · via faryou的博客

前言
在信奥中,二分算法是一种非常重要的方法。利用它,我们在某些场合中寻找数时就不必要遍历数组,大大提高了效率。今天我们来学习二分算法的基本方法。

程序设计思路
有这样一个问题:给你一个数组,数组里面的数已经按数值大小倒序排列,请从中找到某个数,要求不得遍历数组。
这里需要注意,数组里的数已经降序排列,这一点对我们要进行的查找是有帮助的。我们可以利用数之间的大小关系,进行查找。比如说,可以先找到数组中间的那个数,与基准数(要找的数)进行比较。如果基准数大于这个数,那么我们就可以确定基准数在这个数的左侧,反之则在这个数的右侧。这样一直循环,直到找到基准数。
这就是二分查找的精髓。

代码实现
直接看题:
202408211724232426429519.png
这是二分算法的模板题,思路已经有了,直接上代码——

#include <bits/stdc++.h>
int a[1000005],n,m,aq;//a存输入的数据,n、m同题意,aq临时存要查找的数
int search(int iq){
    int left=1,right=n,mid=(1+n)/2;//确定左指针、右指针、中央
    while(left<right){//当左右指针相遇时,循环结束
        mid=(left+right)/2;
        if(a[mid]>=iq) right=mid;
        else left=mid+1;
    }//不断更新左、右、中指针
    if(a[left]==iq) return left;
    else return -1;
}

int main(){//main里全是输入和输出,不讲了
    scanf("%d%d",&n,&m);
    for(int i=1;i<=n;i++) scanf("%d",&a[i]);
    for(int i=1;i<=m;i++){
        scanf("%d",&aq);
        printf("%d ",search(aq));
    }
    return 0;
}

可以看到,这里使用了左右两个指针解决问题。程序并不难写,关键在思路。

总结
二分算法是一种能够大大提升查找效率的方法。之后我还会为大家带来由二分算法衍生出的二分答案和三分算法。我是faryou,再见!