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

数据结构(7.2_1)——顺序查找

顺序查找,又叫"线性查找",通常用于线性表(或者顺序表和链表)。

算法思想:从头到尾全部查找出来(或者反过来也OK)

顺序查找的实现

typedef struct {//查找表的数据结构(顺序表)
	ElemType* 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;
}

查找成功:

 

查找失败:

 

 

顺序查找的实现(哨兵)

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

查找成功的情况:

 查找失败的情况:

 

”哨兵“方法查找的优点:无需判断是否越界,效率更高

查找效率分析

默认每个元素的查找概率为1/n

 

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

用查找判定树分析ASL

一个成功结点的查找长度=自身所在层数

一个失败结点的查找长度=其父节点所在层数

默认情况下,各种失败情况或成功情况都等概率发生

 

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

将概率大的元素优先放到前面(使用降序排列)

总结

 


http://www.kler.cn/a/298542.html

相关文章:

  • leetcode 5. 最长回文子串
  • 在JavaScript开发中,如何判断对象自身为空?
  • 用OpenCV实现UVC视频分屏
  • vue3运行时执行过程步骤
  • thinkphp6.0常用设计模式实例
  • 什么是 ES6 “模板语法” ?
  • 为明天做好准备,摆脱传统财务规划的不足
  • Oracle RAC环境NBU异机恢复
  • 使用 nuxi upgrade 升级现有nuxt项目版本
  • 蓝桥杯备赛day01:循环
  • 使用Ansible进行自动化运维
  • 1-21 角点检测 opencv树莓派4B 入门系列笔记
  • 智能语音交互:人工智能如何改变我们的沟通方式?
  • 还不知道MES和PLC咋通信?5分钟看懂
  • [Redis] Redis中的String类型
  • 创新生态,共赢未来——数字媒体园区构建产业链协同新模式
  • 【前端】笔试题目整理(知识点)
  • 结构型设计模式—组合模式
  • Java学习路线图,助你成为开发高手
  • Windows子系统Ubuntu安装MySQL及windows的navicate连接
  • Midjourney提示词——黑神话悟空角色生成提示词!
  • Python框架Pandas:DataFrame的应用
  • 2024年【上海市安全员C证】考试题库及上海市安全员C证报名考试
  • 经验笔记:框架(Framework)与库(Library)
  • div内英文不换行问题以及解决方案
  • 深入解析 Docker exec 命令