目录
下一篇:查找之折半查找
思想:
从头到尾依次查找
通常用于线性表(同样能用在链表)
代码:
//顺序查找
typedef struct {//查找表结构
int *elem;//动态数组基址
int TableLen;//表长度
}SSTable;
//省略线性表创建添加删除等操作实现
//顺序查找
int Search_Seq(SSTable ST,int key){
int i;
//注意:表长度从1开始,表下标从0开始
for(i=0;i<ST.TableLen&&ST.elem[i]!=key;i++);
return i==ST.TableLen?-1:i;
/*
补充哨兵法:
将第0号元素空出来作为哨兵存储key
ST.elem[0]=key;
如果表中没有key则i会减到0遇到哨兵key,然后返回0表示失败
for(i=ST.TableLen;ST.elem[i]!=key;--i);
return i;
好处在于for中减少了一个条件判断
*/
}
查找效率分析:
优化:
1、使用查找判定树(有序表)
优化了查找失败
如查找21,当比较到29时21<29则停止查找,表中无该关键字
2、被查概率不相等时
把被查概率大的放在考前位置
但是只是优化了查找成功的效率,对于查找失败还得对比完所有元素
例如:
对于1、2优化如果查找失败多一点则采用1,查找成功多一些则用2,具体问题具体分析