顺序查找和折半查找
顺序查找
一、算法思想
顺序查找,又叫“线性查找
”,通常用于线性表
。
算法思想:从头到尾
挨个找(或者反过来也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)
一个成功结点的查找长度=自身所在层数
一个失败结点的查找长度=其父节点所在层数
默认情况下,各种失败情况或成功情况都等概率发生
2.顺序查找的优化(被查概率不相等)
被查概率大的放在靠前位置