顺序查找和折半查找

顺序查找和折半查找

顺序查找

一、算法思想

顺序查找,又叫“线性查找”,通常用于线性表
算法思想:从头到尾挨个找(或者反过来也OK)

二、算法实现

结构体定义

typedef struct{
	ElemType *elem;
	int TableLen;
}SSTable;

1.不使用哨兵

在这里插入代码片

2.使用哨兵(0号位置存哨兵)

在这里插入代码片

优点:无需判断是否越界,效率更高

3.查找效率分析
ASL成功=(1+2+3+…+n)/n=(n+1)/2
ASL失败=n+1

三、算法优化

1.顺序查找的优化(有序表)
用查找判定树分析ASL
共有n+1种查找失败的情况(n+1个失败结点,n个成功结点)
ASL失败=(1+2+3+…+n+n)/(n+1)=n/2+n/(n+1)
一个成功结点的查找长度=自身所在层数
一个失败结点的查找长度=其父节点所在层数
默认情况下,各种失败情况或成功情况都等概率发生
顺序查找和折半查找_第1张图片

2.顺序查找的优化(被查概率不相等)
被查概率大的放在靠前位置

你可能感兴趣的:(数据结构自学,算法)