Point:折半查找 、二叉排序树的构造和查找、 哈希函数(除留余数法)的构造 、哈希函数解决冲突的方法及其特点
查找的基本概念
•
查找表
:
由同一类型的数据元素(或记录)构成的集合
•
关键字
记录中某个数据项的值,可用来识别一个记录
•
主关键字:
唯一标识数据元素
•
次关键字:
可以标识若干个数据元素
对查找表经常进行的操作有:
(1)查询元素;
(2)检索属性;
(3)插入;
(4)删除。
分为静态查找(1)(2)和动态查找(3)(4)
平均查找长度ASL
线性表的查找
一、顺序查找(线性查找)
适用于顺序表或线性链表表示的静态查找表,表内元素之间无序
顺序表的表示
typedef struct {
ElemType *R; //表基址
int length; //表长
}SSTable;
查找函数:
int LocateELem(SqList L,ElemType e)
{ for (i=0;i< L.length;i++)
if (L.elem[i]==e) return i+1;
return 0;
}
//改进
int Search_Seq( SSTable ST , KeyType key ){
//若成功返回其位置信息,否则返回0
ST.R[0].key =key;
for( i=ST.length; ST.R[i].key!=key; --i );
//不用for(i=n; i>0 && ST.R[i].key!=key; --i)
return i;
}
//设置了监视哨,减少了检查是否查找完毕的判断,省时;
•
空间复杂度:一个辅助空间。
•
时间复杂度:
1) 查找成功
ASLs(n)=(1+2+ ... +n)/n =(n+1)/2
2)查找不成功 ASLf =n+1
特点:
•
算法简单,对表结构无任何要求(顺序和链式)
•
n
很大时查找效率较低
•
改进措施:
非等概率
查找时,可按照查找概率进行排序。
易错:
n个数存在一维数组A[1..n]中,在进行顺序查找时,这n个数的排列有序或无序其平均查找