news 2026/6/10 16:43:14

【数据结构-查找】7.1顺序查找-折半查找-分块查找

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【数据结构-查找】7.1顺序查找-折半查找-分块查找

【数据结构-查找篇】7.1 顺序查找、折半查找、分块查找全面详解

查找(Search)是数据结构中最基础、最常用的操作之一。本节重点讲解静态查找表中的三种经典算法:顺序查找折半查找(二分查找)分块查找

一、基本概念回顾

  • 静态查找表:只进行查找操作,不插入、不删除。
  • 关键字(Key):用于标识记录的某个数据项(如学号、ID)。
  • 平均查找长度(ASL - Average Search Length):衡量查找算法效率的核心指标。
    ASL = Σ (每个元素被比较的概率 × 比较次数)

二、1. 顺序查找(Sequential Search)

定义

从表的一端开始,逐个将记录的关键字与给定值比较,直到找到或遍历完整个表。

适用场景
  • 线性表(顺序存储或链式存储)
  • 无序表或有序表均可(但有序时可优化提前终止)
算法实现(顺序表)
intSequentialSearch(intarr[],intn,intkey){for(inti=0;i<n;i++){if(arr[i]==key)returni;// 找到,返回下标}return-1;// 未找到}
优化:哨兵(Sentinel)顺序查找(减少一次判断)
intSequentialSearchWithSentinel(intarr[],intn,intkey){arr[0]=key;// 把0位置设为哨兵(需提前备份原arr[0])inti=n-1;while(arr[i]!=key)i--;returni;// 如果i==0说明没找到,否则返回位置}
性能分析(最坏情况相同,平均不同)
情况查找成功 ASL查找失败 ASL时间复杂度空间复杂度
无序表(n+1)/2nO(n)O(1)
有序表(可提前终止)≈ n/2(成功)≈ n/2(失败)O(n)O(1)

优点:简单,实现容易,对数据无要求
缺点:效率低,适合小规模数据

三、2. 折半查找(Binary Search / 二分查找)

定义

前提:有序表(通常升序),每次将中间元素与关键字比较,将查找范围缩小一半。

算法实现(递归版 + 非递归版)

非递归版(推荐)

intBinarySearch(intarr[],intn,intkey){intlow=0,high=n-1;while(low<=high){intmid=low+(high-low)/2;// 避免溢出写法// int mid = (low + high) / 2; // 传统写法,可能溢出if(arr[mid]==key)returnmid;elseif(arr[mid]<key)low=mid+1;elsehigh=mid-1;}return-1;// 未找到}

递归版

intBinarySearchRecursive(intarr[],intlow,inthigh,intkey){if(low>high)return-1;intmid=low+(high-low)/2;if(arr[mid]==key)returnmid;elseif(arr[mid]<key)returnBinarySearchRecursive(arr,mid+1,high,key);elsereturnBinarySearchRecursive(arr,low,mid-1,key);}
性能分析
项目说明
时间复杂度O(log₂ n)每次折半,查找次数最多 ⌊log₂ n⌋ + 1
查找成功 ASL≈ log₂ (n+1) - 1
查找失败 ASL≈ log₂ n
空间复杂度O(1)(非递归) / O(log n)(递归)递归调用栈深度
查找长度(决策树)高度为 ⌊log₂ n⌋ + 1 的满二叉树

优点:效率极高,适合大规模有序数据
缺点:必须有序,且插入/删除代价大(需保持有序)

经典变种

  • 找第一个等于 key 的位置(处理重复元素)
  • 找最后一个等于 key 的位置
  • 找第一个大于等于 key 的位置(lower_bound)
  • 找第一个大于 key 的位置(upper_bound)

四、3. 分块查找(Block Search / Indexed Sequential Search)

定义

折中方案:兼顾顺序查找的灵活性和折半查找的高效性。

核心思想

  1. 将表分成若干块(块内无序或有序,块间有序)
  2. 建立一个索引表(每个块的最大关键字 + 块首地址)
  3. 先在索引表中折半查找确定目标块
  4. 再在块内顺序查找
数据结构
typedefstruct{intmaxKey;// 本块最大关键字intstart;// 本块在主表中的起始下标intlength;// 本块长度}IndexNode;IndexNode index[];// 索引表(已按 maxKey 升序排序)intdata[];// 主表(分块存储)
查找过程
  1. 在索引表中用折半查找,找到 maxKey ≥ key 的块
  2. 在该块内顺序查找 key
性能分析(假设分为 b 块,每块 s 个元素,n = b × s)
  • 索引表折半查找:O(log₂ b)
  • 块内顺序查找:平均 O(s/2)
  • 总 ASL ≈ log₂ b + s/2

最优分块:当 log₂ b ≈ s/2 时效率最高,即块长 s ≈ √n,块数 b ≈ √n

项目
时间复杂度O(√n + log₂ √n) ≈ O(√n)
空间复杂度O(√n)(索引表)
ASL(最优)≈ 2√n

优点

  • 比顺序查找快,比折半查找灵活(支持高效插入)
  • 适合动态表(插入时只需在对应块尾插入,偶尔重建索引)

缺点:需要额外索引空间

五、三种查找算法对比总结表

查找方法前提条件时间复杂度(平均)ASL(n=1000时近似)空间复杂度适用场景
顺序查找O(n)~500O(1)小数据量、无序表
折半查找有序表O(log₂ n)~10O(1)大数据量、静态有序表
分块查找块间有序O(√n)~63O(√n)动态表、需频繁插入、较大规模数据

六、实际应用场景举例

  • 顺序查找:小配置文件读取、链表查找
  • 折半查找:字典序查询、标准库 lower_bound/upper_bound、Java Arrays.binarySearch
  • 分块查找:数据库索引早期实现、文件系统块索引、适合“读多写少但有插入”的场景

七、总结一句话

  • 顺序查找:简单粗暴,适合小数据
  • 折半查找:高效极致,但要求严格有序且静态
  • 分块查找:折中方案,平衡了效率与灵活性,是动态查找的良好过渡

掌握这三种算法,不仅能应对考试和面试(尤其是 ASL 计算和适用场景判断),也为后续学习散列表二叉排序树B树/B+树打下坚实基础。

有想看具体 ASL 计算过程、变种二分实现代码、或者动态演示的,随时告诉我,我继续拆给你看~

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/10 11:38:36

吐血推荐!9个一键生成论文工具测评:本科生毕业论文+开题报告写作神器

在当前高校教育日益注重学术规范与写作效率的背景下&#xff0c;本科生在撰写毕业论文和开题报告时常常面临时间紧张、内容构思困难、格式要求复杂等多重挑战。为帮助学生高效完成学术任务&#xff0c;我们基于2026年的实测数据与真实用户反馈&#xff0c;对市面上主流的9款一键…

作者头像 李华
网站建设 2026/6/6 13:20:15

流量裂变与数字重塑:基于AI智能名片小程序的短视频全域引流范式研究

摘要&#xff1a; 在2026年移动互联网流量红利枯竭的当下&#xff0c;短视频创业已从“跑马圈地”的粗放时代迈入“精耕细作”的存量博弈期。传统的引流手段因转化链路冗长、数据孤岛严重而日渐式微。本文旨在探讨一种革命性的引流范式——将AI智能名片小程序深度嵌入短视频运营…

作者头像 李华
网站建设 2026/6/10 14:22:13

通义千问3-Reranker-0.6B一文详解:FP16量化对精度影响实测报告

通义千问3-Reranker-0.6B一文详解&#xff1a;FP16量化对精度影响实测报告 1. 模型定位与核心价值 你有没有遇到过这样的问题&#xff1a;在做RAG系统时&#xff0c;检索出来的前10个文档里&#xff0c;真正有用的可能只有第3个和第7个&#xff0c;但排序模型却把它们排到了后…

作者头像 李华
网站建设 2026/6/10 11:41:47

基于OpenSpec规范的TranslateGemma-12B-it API设计

基于OpenSpec规范的TranslateGemma-12B-it API设计 1. 为什么企业需要标准化的翻译API接口 在实际业务系统中&#xff0c;我们经常遇到这样的场景&#xff1a;电商后台需要实时翻译商品描述&#xff0c;客服平台要处理多语言用户咨询&#xff0c;内容管理系统得支持全球化内容…

作者头像 李华
网站建设 2026/6/10 11:37:26

Qwen3-ASR-0.6B效果实测:不同信噪比下22种方言识别鲁棒性对比

Qwen3-ASR-0.6B效果实测&#xff1a;不同信噪比下22种方言识别鲁棒性对比 1. 测试背景与模型介绍 Qwen3-ASR-0.6B是一款轻量级高性能语音识别模型&#xff0c;参数量仅6亿&#xff0c;基于Qwen3-Omni基座与自研AuT语音编码器构建。该模型主打多语种支持、低延迟处理和高并发吞…

作者头像 李华
网站建设 2026/6/10 11:38:46

GTE文本向量与MySQL集成:构建企业级语义搜索系统

GTE文本向量与MySQL集成&#xff1a;构建企业级语义搜索系统 1. 为什么传统关键词搜索在企业场景中越来越力不从心 上周帮一家做工业设备文档管理的客户做技术咨询&#xff0c;他们提到一个很典型的问题&#xff1a;工程师在查维修手册时&#xff0c;输入"电机过热保护失…

作者头像 李华