查找的分类

在数据结构中,查找分为静态查找,动态查找。相对于二者来说,静态查找更容易实现,我们今天先从简单的说起,主要讲讲静态查找的实现。在讲静态查找时就得提到和它相关的几个概念,第一就是静态查找的效率,静态查找的效率主要用“平均查找长度”这一指标来衡量。而一个好的算法应使平均查找长度最小化。

静态查找通常是从一个线性表中查找数据元素,线性表可以是基于数组的顺序存储或者是线性链表存储。静态查找包括顺序查找,和二分查找(又叫折半查找)两种。首先第一种顺序查找,它是一种最基本最直接的查找方法,它是从线性表的一端开始,向另一端逐个取出数据元素的关键字,与要找的关键字K进行比较,来判定是否存在要找的数据元素。以数组存储为例,设数据元素从下标为1的数组单元到下标为Last的单元存放,为了简化算法,使得从后向前查找失败时,不必判断表是否检查完毕,可以在查找开始前,将要查找的关键字K存入下标为0的位置,这样一来,即使原表1~Last单元中没有关键字为K的记录,算法再多查找一次下标为0的单元,也会找到元素而终止,而此时用返回数组下标 值0表明查找失败。顺序查找算法的时间复杂度为O(n),n为数据元素的个数,Last为n.

静态查找的另一种方式是二分查找,又叫折半查找,它是针对线性表中的数据元素是有序排列采用的一种有效的办法。假设n个数据元素的关键字满足K1<K2.....Kn,若要查找的关键字K小于线性表中的某一关键字Ki,那么我们要找的元素就在Ki的左边,要是查找的关键字K大于线性表的某一关键字Ki,要找的元素则在Ki的右边。二分查找就是在每次要查找的数据集合中取出中间元素关键字Kmid与K进行比较,根据比较结果确定是否要进一步查找。当K=Kmid,则查找成功,否则,将按照上述方式进行查找。以此类推,每步的查找范围都将是上一次的一半,因此,二分查找也常常被称为折半查找。正常顺序应该是右边界大于或等于左边界(right>=left),如果出现左边界大于右边界的情况(left>right),即左右边界错位的情况,则表明二分查找结束,没有发现所要找的数据元素。对于二分查找的算法时间复杂度分析,我们知道当线性表中没有所要查找的元素时,算法复杂度达到最大。设经过k步,查找范围从n减小到1,因为每部查找的范围是上一步的1/2,可得到关系n/2^k=1,由此得出结论二分查找算法具有对数的时间复杂度O(㏒n).好了,今天就讲到这里,

 

posted @ 2019-05-20 14:34  大数据110  阅读(356)  评论(0编辑  收藏  举报