顺序表的查找可以用顺序查找实现
顺序查找的存储结构:
typedef struct{
ElemType *elem;
int length;
};
顺序查找:从表中最后一个记录进行查找 直到找到记录的关键词和给定值的记录
查找过程中的哨兵逻辑:
在表头设置哨兵,从表尾进行查找,如果查找过程中遇到哨兵,则表查找结束
查找操作的性能分析:
主要从时间复杂度和空间复杂度进行评判:
在时间复杂度的评判中,查找算法的基本操作为:将记录的关键字和给定值进行比较;
则可以 “关键字与给定值进行比较的记录个数的平均值” 来评判查找操作的性能
设Pi为与第i个记录进行比较的概率 Ci 为已与给定值进行过比较过的关键字个数;其中ΣPi=1;
则查找成功时的平均查找长度为ASL=ΣPi*Ci;
其中Ci取决于记录在表中的位置,如记录在第一个,采取从n到1的顺序进行查找,则需要比较查找表的长度n次 Ci=n-i+1;
先关公式如下:
n=length;
ASL=nP1+(n-1)P2+....+2Pn-1+Pn;
如果每个记录的查找概率相同,及 Pi=1/n;
则ASL=PiΣ(Ci)=1/nΣ(n-i+1)=(1/n)(n(n+1)/2)=(n+1)/2
当查找概率不同时,可对数据进行排序,可以提高查找效率
方案:对数据元素增加一个数据项:访问频度;并按访问频度进行升序排列,频度越大,则数据元素在表中的位置越靠后,这样当我们从后往前查找时的效率最高,每次查找完需对该记录的频度加一;
顺序查找和其他查找方法的优缺点:
缺点:平均查找长度较大,当n很大时 插好效率很低
优点:算法简单,比较常用