当前位置: 首页 > news >正文

数据结构——三十九、顺序查找(王道408) - 指南

文章目录

  • 前言
  • 一.顺序查找的算法思想
  • 二.顺序查找的实现
    • 1.一般实现
      • 1.实现思路
      • 2.实现代码
    • 2.哨兵实现顺序查找
      • 1.实现思路
      • 2.代码
      • 3.优点
      • 4.执行效率
  • 三.顺序查找的优化(对有序表)
    • 1.思路
    • 2.执行效率
      • 1.执行失败
      • 2.优势
    • 3.用查找判定树分析ASL
  • 四.顺序查找的优化(被查概率不相等)
  • 五.知识回顾与重要考点
  • 结语

前言

本文介绍了顺序查找算法的基本实现与优化方法。顺序查找是一种线性查找算法,通过逐一比较元素实现查找。文章首先给出了顺序查找的一般实现代码,然后介绍了哨兵机制优化方法,该方式通过减少越界判断提高效率。对于有序表的情况,可以通过提前终止查找进一步优化性能。此外,还讨论了根据元素被查概率调整存储位置的优化策略,虽然能提高查找成功效率,但会影响查找失败时的性能。最后指出顺序查找的时间复杂度始终为O(n)。本文通过算法思想、代码实现、效率分析和优化策略,全面介绍了顺序查找这一基础算法。

一.顺序查找的算法思想

二.顺序查找的实现

1.一般实现

1.实现思路

  • 从前往后依次寻找与查找目标关键字相同的元素

2.实现代码

typedef struct{	//查找表的数据结构(顺序表)
Element *elem;	//动态数组基址
int TableLen;	//表的长度
}SSTable;
//顺序查找
int Search_Seq(SSTable ST, ElemType key){
int i;
for(i=0; i<ST. TableLen && ST. elem[i]!=key; ++i);
//查找成功,则返回元素下标;查找失败,则返回-1
return i==ST. TableLen?-1:i;
}

在这里插入图片描述

2.哨兵实现顺序查找

1.实现思路

2.代码

typedef struct{//查找表的数据结构(顺序表)
ElementType *elem; //动态数组基址
int TableLen; //表的长度
}SSTable;
//顺序查找
int Search_Seq(SSTable ST, ElementType key){
ST.elem[0]=key; //“哨兵”
int i;
for(i=ST.TableLen; ST.elem[i]!=key;--i); //从后往前找
return i; //查找成功,则返回元素下标;查找失败,则返回0
}

3.优点

  • 在每一轮for循环的时候,我们只需要判断当前指向的元素和我们要找的那个关键字是否相等,而不用判断是否已经遍历完所有元素
  • 优点:无需判断是否越界,效率更高

4.执行效率

三.顺序查找的优化(对有序表)

1.思路

2.执行效率

1.执行失败

2.优势

  • 很显然,对比普通的查找方法,它的执行失败的ASL更少

3.用查找判定树分析ASL

在这里插入图片描述

四.顺序查找的优化(被查概率不相等)

在这里插入图片描述

  • 把被查找的概率更大的这些关键字放到更靠前的位置
  • 这么做可以使得当我们在查找成功的情况下,平均查找长度能够更进一步的缩短
  • 这样优化就会导致关键字的值又变成了乱序,这样做可以提高查找成功的平均查找长度,但是对于查找失败的情况又只能从头扫到尾

五.知识回顾与重要考点

在这里插入图片描述

结语

最近被学校的琐事缠住了,只能暂时停更

如果想查看更多章节,请点击:一、数据结构专栏导航页

http://www.jsqmd.com/news/294609/

相关文章:

  • NVIDIA GPU 系列用途分类梳理
  • PADS Layout 添加板宽圆角
  • 亲测好用!8款AI论文软件测评:研究生开题报告必备工具
  • 百度文库与网盘重组新事业群,向李彦宏汇报,压力之下的改革能不能成?
  • 排列组合专题
  • 数字化转型下零售门店管理软件的功能与选择考量
  • 闲鱼开店不用愁!自动回复 + 远程管理,随时随地搞定买家咨询就靠cpolar
  • JBoltAI网关:Java企业级AI的稳定“交通枢纽”
  • 连锁门店数字化平台核心功能与适用场景解析
  • 技术已到位,失业潮为何还未爆发?决策层的认知盲区才是真正的“缓冲带”
  • [Android] vFlow v1.4.0 可视化工作流自动化工具
  • [Windows] WeFlow v1.3.1-V信聊天记录浏览、导出
  • [Windows] 施工日志(工作日志)更新版
  • 【Jenkins从入门到精通:全面指南与实战教程】
  • ADB命令-Kernel常用信息
  • 英语期末复习
  • ADB命令-Kernel-Debug
  • 33.排序链表
  • 折线图的奇妙变奏:四种创意可视化方法
  • Reactor线程池切换publishOn与subscribeOn
  • 本地win系统和vmware 虚拟机 ubuntu实现文件共享
  • CDC虚拟串口与硬件串口传输速度的对比测试
  • 数据结构:加权图 - 详解
  • Xcode中iOS资源混淆问题与解决方案详解
  • 导师推荐2026 TOP10 AI论文软件:本科生毕业论文写作全解析
  • 2026年豆包优化工具选型:从技术底层到效果落地5大核心评估
  • 2026年1月DeepSeek优化服务商口碑TOP10:从技术到效果转化的选型
  • Git代码规范
  • 亲测好用10个AI论文网站,继续教育学生轻松搞定毕业论文!
  • 37、SQL的Explain