马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
序次查找,又叫"线性查找",通常用于线性表(大概序次表和链表)。
算法头脑:重新至尾全部查找出来(大概反过来也OK)
序次查找的实现
- typedef struct {//查找表的数据结构(顺序表)
- ElemType* elem;//动态数组地址
- int TableLen;//表的长度
- }SSTable;
- //顺序查找
- int Search_Seq(SSTable ST, ElemType key) {
- int i;
- for (i = 0; i < ST.TableLen && ST.elem[i]!= key; ++i);
- //查找成功,则返回下标;查找失败,则返回-1
- return i == ST.TableLen ? -1 : i;
- }
复制代码 查找乐成:
查找失败:
序次查找的实现(哨兵)
- typedef struct {//查找表的数据结构(顺序表)
- ElemType* elem;//动态数组地址
- int TableLen;//表的长度
- }SSTable;
- //顺序查找
- int Search_Seq(SSTable ST, ElemType key) {
- ST.elem[0] = key;//"哨兵"
- int i;
- for (i = ST.TableLen; ST.elem[i] != key;--i);//从后往前找
- return i;//查找成功,则返回元素下标;查找失败,则返回0
- }
复制代码 查找乐成的环境:
查找失败的环境:
”哨兵“方法查找的优点:无需判断是否越界,服从更高
查找服从分析
默认每个元素的查找概率为1/n
序次查找的优化(对有序表)
用查找判断树分析ASL
一个乐成结点的查找长度=自身所在层数
一个失败结点的查找长度=其父节点所在层数
默认环境下,各种失败环境或乐成环境都等概率发生
序次查找的优化(被查概率不相称)
将概率大的元素优先放到前面(利用降序分列)
总结
|