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

[复制链接]
发表于 2026-1-25 12:52:09 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
序次查找,又叫"线性查找",通常用于线性表(大概序次表和链表)。
算法头脑:重新至尾全部查找出来(大概反过来也OK)
序次查找的实现
  1. typedef struct {//查找表的数据结构(顺序表)
  2.         ElemType* elem;//动态数组地址
  3.         int TableLen;//表的长度
  4. }SSTable;
  5. //顺序查找
  6. int Search_Seq(SSTable ST, ElemType key) {
  7.         int i;
  8.         for (i = 0; i < ST.TableLen && ST.elem[i]!= key; ++i);
  9.         //查找成功,则返回下标;查找失败,则返回-1
  10.         return i == ST.TableLen ? -1 : i;
  11. }
复制代码
查找乐成:
 
查找失败:
 
 
序次查找的实现(哨兵)
  1. typedef struct {//查找表的数据结构(顺序表)
  2.         ElemType* elem;//动态数组地址
  3.         int TableLen;//表的长度
  4. }SSTable;
  5. //顺序查找
  6. int Search_Seq(SSTable ST, ElemType key) {
  7.         ST.elem[0] = key;//"哨兵"
  8.         int i;
  9.         for (i = ST.TableLen; ST.elem[i] != key;--i);//从后往前找
  10.         return i;//查找成功,则返回元素下标;查找失败,则返回0
  11. }
复制代码
查找乐成的环境:
 查找失败的环境:
 
”哨兵“方法查找的优点:无需判断是否越界,服从更高
查找服从分析

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

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


用查找判断树分析ASL

一个乐成结点的查找长度=自身所在层数
一个失败结点的查找长度=其父节点所在层数
默认环境下,各种失败环境或乐成环境都等概率发生

 
序次查找的优化(被查概率不相称) 

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

总结

 
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表