电脑故障

位置:IT落伍者 >> 电脑故障 >> 浏览文章

查找-线性表的查找-顺序查找


发布日期:2022/4/21
 

顺序查找(Sequential Search)

在表的组织方式中线性表是最简单的一种顺序查找是一种最简单的查找方法

顺序查找的基本思想

基本思想是从表的一端开始顺序扫描线性表依次将扫描到的结点关键宇和给定值K相比较若当前扫描到的结点关键字与

K相等则查找成功;若扫描结束后仍未找到关键字等于K的结点则查找失败

顺序查找的存储结构要求

顺序查找方法既适用于线性表的顺序存储结构也适用于线性表的链式存储结构(使用单链表作存储结构时扫描必须从第一个

结点开始)

基于顺序结构的顺序查找算法

()类型说明

typedef struct{

KeyType key;

InfoType otherinfo; //此类型依赖于应用

}NodeType;

typedef NodeType SeqList[n+]; //号单元用作哨兵

()具体算法

int SeqSearch(Seqlist RKeyType 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较大时不宜采用顺序查找

上一篇:树 - 树和森林- 树和森林的遍历

下一篇:排序之希尔排序