知识大全 查找-线性表的查找-顺序查找
Posted 结点
篇首语:满堂花醉三千客,一剑霜寒十四洲。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 查找-线性表的查找-顺序查找相关的知识,希望对你有一定的参考价值。
顺序查找(Sequential Search)
在表的组织方式中 线性表是最简单的一种 顺序查找是一种最简单的查找方法
顺序查找的基本思想
基本思想是 从表的一端开始 顺序扫描线性表 依次将扫描到的结点关键宇和给定值K相比较 若当前扫描到的结点关键字与
K相等 则查找成功;若扫描结束后 仍未找到关键字等于K的结点 则查找失败
顺序查找的存储结构要求
顺序查找方法既适用于线性表的顺序存储结构 也适用于线性表的链式存储结构(使用单链表作存储结构时 扫描必须从第一个
结点开始)
基于顺序结构的顺序查找算法
( )类型说明
typedef struct
KeyType key;
InfoType otherinfo; //此类型依赖于应用
NodeType;
typedef NodeType SeqList[n+ ]; // 号单元用作哨兵
( )具体算法
int SeqSearch(Seqlist R KeyType K)
//在顺序表R[ n]中顺序查找关键字为K的结点
//成功时返回找到的结点位置 失败时返回
int i;
R[ ] key=K; //设置哨兵
for(i=n;R[i] key!=K;i ); //从表后往前找
return i; //若i为 表示查找失败 否则R[i]是要找的结点
//SeqSearch
注意
监视哨设在高端的顺序查找【参见练习】
( )算法分析
① 算法中监视哨R[ ]的作用
为了在for循环中省去判定防止下标越界的条件i≥ 从而节省比较的时间
②成功时的顺序查找的平均查找长度
>
在等概率情况下 p i = /n( ≤i≤n) 故成功的平均查找长度为
(n+…+ + )/n=(n+ )/
即查找成功时的平均比较次数约为表长的一半
若K值不在表中 则须进行n+ 次比较之后才能确定查找失败
③表中各结点的查找概率并不相等的ASL
【例】在由全校学生的病历档案组成的线性表中 体弱多病同学的病历的查找概率必然高于健康同学的病历 由于上式的ASL sq
在p n ≥p n ≥…≥p ≥p 时达到最小值
若事先知道表中各结点的查找概率不相等和它们的分布情况 则应将表中结点按查找概率由小到大地存放 以便提高顺序查找的效率
为了提高查找效率 对算法SeqSearch做如下修改 每当查找成功 就将找到的结点和其后继(若存在)结点交换 这样 使得查
找概率大的结点在查找过程中不断往后移 便于在以后的查找中减少比较次数
④顺序查找的优点
算法简单 且对表的结构无任何要求 无论是用向量还是用链表来存放结点 也无论结点之间是否按关键字有序 它都同样适用
⑤顺序查找的缺点
查找效率低 因此 当n较大时不宜采用顺序查找
cha138/Article/program/sjjg/201311/23867相关参考