2019/11/02
1、顺序查找(从前往后||从后往前查)
数据元素定义:
typedef struct{
Keytype key; //关键字域
InfoType otherinfo;//其他域
}Elemtype;
顺序表定义:
typedef struct{Element *R; //存储空间基地址
int length; //当前长度
}SSTable;
算法1顺序查找:[时间复杂度:O(n)]
int Search_Seq(SSTable ST,KeyType key){
for(i=ST.length;i>=1;--i)
if(ST.R[i].key==key) return i; //从后往前找
return 0;
}
算法2设置监视哨的顺序查找:[时间复杂度:O(n)]
int Search_Seq(SSTable ST,Keytype key){
ST.R[0].key=key; //"哨兵",也可以放在高下标处
for(i=ST.length; ST.R[i]!=key; --i); //从后往前找
return i;
}
"哨兵"的使用,能使顺序查找在ST.length≥1000时,进行一次查找所需的平均时间几乎减少一半。
顺序查找优点:
算法简单,对表结构无要求,既适用于顺序结构,又适用于链式结构,无论记录是否按关键字有序 均可使用。
顺序查找缺点:
平均查找长度较大,查找效率较低,当n很大时,不宜使用 顺序查找。