提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
前言
查找的基本概念
顺序查找
折半查找
一、查找的基本概念
1.基本概念
查找:指定某个值,在查找表中确定是否存在一个记录,该记录的关键字等于给定值。
(1) 关键字:记录(数据元素)中的某个数据项的值。
(2) 主关键字:该关键字可以唯一地标识一个记录。
(3) 次关键字:该关键字不能唯一标识一个记录。
(4) 静态查找表:对查找表的查找仅是以查询为目的,不改动查找表中的数据。【无需动态修改查找表(顺序查找、折半查找、散列查找);】
(5) 动态查找表:在查找的过程中同时插入不存在的记录,或删除某个已存在的记录。【需要动态修改和删除的查找表(二叉排序树查找、散列查找)】
(6) 分为查找成功和查找失败
(7) 查找成功:查找表中存在满足查找条件的记录。
(8) 查找不成功:查找表中不存在满足查找条件的记录
(9) 内查找:整个查找过程都在内存中进行。
(10) 外查找:在查找过程中需要访问外存
(11) 平均查找长度ASL------查找方法时效的度量:为确定记录在查找表中的位置,需和给定值进行比较的关键字个数的期望值。
查找成功时的ASL计算方法:
n:记录的个数
pi:查找第i个记录的概率,且 ( 不特别声明时认为等概率 pi =1/n )
ci:找到第i个记录所需的比较次数
(12) 为确定记录在查找表中的位置,需和给定值进行比较的关键字个数的期望值
(13) 平均查找长度:一次查找长度是需要比较的关键字的次数
二、顺序查找&&折半查找
顺序查找
概念:主要用于线性表中查找,分为无序线性表和有序线性表查找
1.一般线性表顺序查找
(1)从线性表一端开始逐个关键字是否满足要求,若满足则查找成功,若查找到末尾还未查找到则失败,其中引入哨兵作用是不必判断数组是否越界,因为当i==0时,循环一定会跳出
(2) ASL成功 =(n+1)/2, ASL不成功=n+1;当n较大时,平均查找长度较大,效率低;优点是对元素存储无要求;对线性的链表只能顺序查找
3.有序表的顺序查找
(1)概念:查找失败时可以不用再比较到表的另一端就能返回查找失败的信息,可以用如下判定树表示
(2) ASL成功=(n+1)/2, ASL不成功=n/2+n/(n+1)
顺序表的查找
c
int Search(Elemtype a[], int n,KeyType x)
{ //在顺序表a中顺序查找其关键字等于x的元素.若找到,函数值为该元素
// 在表中的位置否则为0
i=n;flag=0;
while(i>0) if(a[i].key==x)
{return i;
flag=1;
break;}
else i--;
if(flag==0) return 0;
}
折半查找
1.概念:又叫二分查找,仅适用于按关键字排列有序的顺序表
其基本过程是:
将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。
其中mid=(low+high)/2,当high<low时,表示不存在这样的子表空间,查找失败。
折半查找算法
c
int Search_Bin(elemType a[],int n, elemType x)
/*在有序表ST中折半查找其关键字等于key的元素,若找到,则函数值为该元素在表中的位置,否则为0*/
{ low=0 ;
high=n-1;
while (low<=high)
{ mid=(low+high) / 2;
if (x= =a[mid])
return mid ;/*找到待查元素*/
else if (key<a[mid]) high=mid-1;
/*未找到,则继续在前半区间进行查找*/
else low=mid+1; /*继续在后半区间进行查找*/
}
}
例题
例题:已知11个元素有序表{7,10,13,16,19,29,32,33,37,41,43},查找11和32,可以用如下二叉树表示查找过程;树最下面都是方形,表示查找不成功的情况;查找成功的查找长度为从根结点到目的结点的路径上的结点数,而不成功的情况为从根结点到对应失败结点的父结点路径上结点数;若有序序列有n个结点,判定树有n个圆形非叶子结点和n+1个方形叶结点,是为二叉排序树
查找成功:ASL=(1x1+2x2+3x4+4x4)/11=3
查找不成功:ASL=(3x4+4x8)/12=11/3
-
折半查找方法的优点 是比较次数少,查找速度快,平均性能好;
-
其缺点是要求待查表为顺序存储的有序表,插入删除困难。
-
因此,折半查找方法适用于不经常变动而查找频繁的有序列表
总结
查找的基本概念
顺序查找
折半查找