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

推荐订阅源

S
Securelist
SecWiki News
SecWiki News
Help Net Security
Help Net Security
Attack and Defense Labs
Attack and Defense Labs
L
LINUX DO - 最新话题
H
Heimdal Security Blog
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
H
Hacker News: Front Page
Hacker News - Newest:
Hacker News - Newest: "LLM"
Google DeepMind News
Google DeepMind News
V2EX - 技术
V2EX - 技术
Hacker News: Ask HN
Hacker News: Ask HN
O
OpenAI News
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
T
Threat Research - Cisco Blogs
A
Arctic Wolf
Simon Willison's Weblog
Simon Willison's Weblog
P
Privacy & Cybersecurity Law Blog
T
Threatpost
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
C
Cyber Attacks, Cyber Crime and Cyber Security
T
Tor Project blog
C
CXSECURITY Database RSS Feed - CXSecurity.com
Spread Privacy
Spread Privacy
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
人人都是产品经理
人人都是产品经理
S
SegmentFault 最新的问题
www.infosecurity-magazine.com
www.infosecurity-magazine.com
P
Palo Alto Networks Blog
C
CERT Recently Published Vulnerability Notes
PCI Perspectives
PCI Perspectives
AWS News Blog
AWS News Blog
IT之家
IT之家
美团技术团队
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
T
Tailwind CSS Blog
M
MIT News - Artificial intelligence
V
Visual Studio Blog
Schneier on Security
Schneier on Security
T
The Exploit Database - CXSecurity.com
有赞技术团队
有赞技术团队
小众软件
小众软件
Google Online Security Blog
Google Online Security Blog
N
News | PayPal Newsroom
博客园_首页
T
Tenable Blog
酷 壳 – CoolShell
酷 壳 – CoolShell
S
Secure Thoughts
I
Intezer

博客园 - 欢乐豆123

软件设计师考试 - 有限自动机 软件设计师考试 - 排序算法 哈夫曼树以及哈夫曼编码 软件设计师案例题型 - DFD(数据流图) 软件设计师考试 - Gantt图与PERT图(项目管理) 软件设计师考试 - 数据表示(原码、反码、补码、移码) 软件设计师考试 - 上午题型分析 软件设计师考试 - 下午题型分析 软件设计师考试-应用技术 内存溢出问题 常见的算法类型 排序算法的介绍 微信生态梳理 海明码介绍 Elasticsearch 实战:基于 function_score 的搜索与权重排序 Nexus的简单介绍以及如何上传自定义包 设计模式-桥接模式(Bridge Pattern) 设计模式简介 jmeter压测 sdkman-管理多个版本的JDK SpringBoot中使用Aop统一拦截MQ消息处理 项目管理流程以及规范 Java-泛型的使用
软件设计师考试 - 二分查找
欢乐豆123 · 2026-04-16 · via 博客园 - 欢乐豆123

软件设计师考试 - 二分查找

折半查找(也称为二分查找)是一种高效的查找算法常用于有序数组中查找某个特定元素的位置。

基本思路如下:

1.  初始化左边界和右边界,将左边界设为0(为了方便计算也可以为1,后面的元素依次递进 + 1 ),将右边界设为数组长度减1。

2. 取中间位置的元素,与目标元素进行比较。说明:中间元素的位置为(low+high)/2,然后向下取整(取整数部分)。

3. 如果中间元素等于目标元素,则返回中间元素的索引。

4. 如果中间元素大于目标元素,则在左半部分继续查找,将右边界更新为中间元素的前一个索引。

5. 如果中间元素小于目标元素,则在右半部分继续查找,将左边界更新为中间元素的后一个索引。

重复步骤2至5,直到左边界大于右边界,表示查找失败。

说明:由查找的中间元素按照先后顺序组成的就是比较关键字的序列

折半(二分)查找是一种基于有序数组的查找算法,其时间复杂度为 O(logn)。

举个例子:二分查找,19,24,30,35,40,47,55,70,91,比较的关键字可能的序列  ( B

A. 40,55,91

B. 40,24,30

C. 40,35,24

D. 40,47,70

image

  分析:

  一般查找一个小于中间元素的值,查找一个大于中间元素的值,基本就能列出关键序列了

  1)查找的目标元素为 70

  初始化边界: low=1  high=9  

  中间元素: (1+9)/2 = 5  元素为 40 ;因为40 < 70 则 low = 6

  中间元素: (6+9)/2 = 7  元素为 55 ;因为55 < 70 则 low = 8

  中间元素: (8+9)/2 = 8  元素为 70 ;因为70 = 70 所以找到目标元素了

  2)查找的目标元素为 38 

  初始化边界: low=1  high=9  

  中间元素: (1+9)/2 = 5  元素为 40 ;因为 38 < 40 则  high = 4 

  中间元素: (1+4)/2 = 2  元素为 24 ;因为 24 < 38 则 low = 3

  中间元素: (3+4)/2 = 3 元素为 30 ;因为 30 < 38 则 low = 4

  中间元素:(4+4)/2 = 4 元素为 35 ; 因为 35 < 38 则查找不到目标元素

  基于上面的分析,可以找到答案为