91顺序表的查找( Sequential Search) 所谓顺序查找,又称线性查找,主要用于在线性结构中进 行查找。 存储结构: typedef structi Elem Type *elem; int length; 3 SSTable 查找过程:从表中最后一个元素开始,顺序用各元素的关键 字与给定值x进行比较,若找到与其值相等的元素,则查找成 功,给出该元素在表中的位置;否则,若直到第一个记录仍 未找到关键字与x相等的对象,则查找失败
算法9.1(p217) Search Seq(ssTable st, KeyType key i ∥顺序查找的算法,0号元素为监视哨 int i: STelem o key=key for (i=STlength; !EQ(ST. i key, key);--1); return 19
算法9.1 (p217) Search_Seq(SSTable ST, KeyType key){ // ST.elem[0].key=key; for (i=ST.length; !EQ(ST.elem[i].key,key);--i); return i; }
顺序查找的平均查找长度 设查找第i个元素的概率为P,查找到第i个元素 所需比较次数为c,则查找成功的平均查找长度: ASL ∑P;c,(∑p1=1) i=1 在顺序查找情形,c1=ni+1,i=1,…,n,因此 ASL ∑P1:(n-i+1) 在等概率情形,P;=1/n,i=0,1,…,n-1 ASL (n-i+1) ln(n+1)n+1 2
n i i n i ASL succ pi ci p 1 . ( 1 ) 1 ( ) 1 1 ASL p i n i succ i n . ( ) ( ) n i succ n n n n i n ASL 1 2 1 2 1 1 1 1 n
92有序表的查找 折半查找:先求位于查找区间正中的对象的 下标mid,用其关键字与给定值x比较: ◆ Element(mid getKey()=x,查找成功 ◆ Element mid getKey()>x,把查找区间缩小 到表的前半部分,再继续进行对分查找; ◆ Element(mid getKey()<x,把查找区间缩小 到表的后半部分,再继续进行对分查找 每比较一次,查找区间缩小一半。如果查找 区间已缩小到一个对象,仍未找到想要查找 的对象,则查找失败
912有序表的查找 折半查找: (1)mid=(ow+high)2」 (2)比较 STelem mid. key==key? 如果 STele mid key==key,则查找成功, 返回mid值 如果 ST. mid. key>key,则置high=mid-1 如果 STele mid]key<key,则置low=mid+l (3)重复计算md以及比较 ST. mid. key与key, 当low>high时,表明查找不成功,查找结東
(1)mid= (low+high)/2」