本文是个人笔记,仅用于学习分享,素材来自青岛大学王卓老师的教学视频,如有侵权,请留言作删文处理。
📚 Week02_09_线性表的顺序表示和实现4–查找算法
📚 顺序表上的查找操作
按值查找
例如:在图书表中,按照给定书号进行查找,确定是否存在该图书。如果存在,输出是第几个元素;如果不存在,输出0。
【算法02.07】顺序表的查找
🔸 在线性表 L 中查找与指定值 e 相同的数据元素的位置
🔸 从表的一端开始,逐个进行记录的关键字和给定值得比较。找到,返回该元素的位置序号;未找到,返回0。
实现方式1
// 在线性表L中查找值为e的数据元素,返回其序号(是第几个元素)
int LocateElem(SqList L, ElemType e)
{
for(i=0; i<L.length; i++)
// 查找成功,返回序号
if(L.elem[i] == e)
return (i+1);
// 查找失败,返回0
return 0;
}
实现方式2
// 在线性表L中查找值为e的数据元素,返回其序号(是第几个元素)
int LocateElem(SqList L, ElemType e)
{
int i = 0;
while(i < L.length&& L.elem[i] != e)
i++;
// 查找成功,返回序号
if(i < L.length)
return (i+1);
// 查找失败,返回0
return 0;
}
📚 顺序表的查找算法分析
🔸 因为查找算法的基本操作为:将记录的关键字同给定值进行比较
基本操作
L.elem[i] == e
比较次数:e = a,1次;e = b,2次;e = c,3次;……;e = g,7次。
平均比较次数:(1 + 2 + 3 + 4 + 5 + 6 + 7) / 7 = 4次。
平均查找长度 ASL(Average Search Length)
为确定记录在表中的位置,需要与给定值进行比较的关键字的个数的期望值叫做查找算法的平均查找长度。
顺序表的平均查找长度:
假设每个记录的查找概率相等
则有:
顺序表的查找算法的时间复杂度:O(n)
学习笔记最后有微信公众号:惟CPP,欢迎关注,一起交流学习进步~