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

推荐订阅源

Latest news
Latest news
T
Troy Hunt's Blog
V
Vulnerabilities – Threatpost
L
LINUX DO - 热门话题
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Simon Willison's Weblog
Simon Willison's Weblog
V
V2EX
博客园 - 司徒正美
B
Blog RSS Feed
AWS News Blog
AWS News Blog
MyScale Blog
MyScale Blog
Scott Helme
Scott Helme
Cisco Talos Blog
Cisco Talos Blog
Last Week in AI
Last Week in AI
NISL@THU
NISL@THU
博客园 - Franky
P
Proofpoint News Feed
博客园_首页
C
CERT Recently Published Vulnerability Notes
雷峰网
雷峰网
S
Schneier on Security
P
Proofpoint News Feed
Hugging Face - Blog
Hugging Face - Blog
G
GRAHAM CLULEY
博客园 - 三生石上(FineUI控件)
月光博客
月光博客
WordPress大学
WordPress大学
The Hacker News
The Hacker News
T
Threatpost
阮一峰的网络日志
阮一峰的网络日志
A
Arctic Wolf
Microsoft Azure Blog
Microsoft Azure Blog
T
The Exploit Database - CXSecurity.com
Engineering at Meta
Engineering at Meta
罗磊的独立博客
T
The Blog of Author Tim Ferriss
D
Darknet – Hacking Tools, Hacker News & Cyber Security
I
Intezer
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
K
Kaspersky official blog
SecWiki News
SecWiki News
云风的 BLOG
云风的 BLOG
美团技术团队
C
Cybersecurity and Infrastructure Security Agency CISA
博客园 - 【当耐特】
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Security Latest
Security Latest
C
Cyber Attacks, Cyber Crime and Cyber Security
B
Blog
S
Security Affairs

博客园 - 欢乐豆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 则查找不到目标元素

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