数据查找算法比较

开发工具与关键技术:Visual Studio 2015   顺序查找与二分查找的比较
作者:廖 茂
撰写时间:2020年05月26日

我们做项目时必须要面对并且处理一大堆的数据,对这些数据进行哪一种处理就要用上对应的某一种方法,而在这里,将对数据结构与算法中对数据进行查找的静态查找中的顺序查找与二分查找进行比较,分析一下两者的优缺点,两者都是对有序链表进行查找的算法。首先我们来看一下顺序查找。

顺序查找,查找表的存储结构是线性表,其查找过程是依次用查找条件中给定的值与查找表中数据元素的关键字值进行比较,若某个记录的关键字值与给定值相等,则查找成功,返回该记录的存储位置,反之,若直到最后一个记录,其关键字值与给定值均不相等,则查找失败,返回查找失败标志。下面看一下顺序查找的完整算法,如下:
在这里插入图片描述
在这里是先从最后开始查找,所以让i=n,然后把i放入监视哨中,从最后一个开始查找,如果查找到表中数据元素不等于给定值的话,i–,就是继续往前查找,如若查找到相等的数据元素,就返回查找到的数据元素的位置,否则返回查找失败的标志。顺序查找就是这样,顺序查找的时间效率较低,适用于数据量比较小的线性表的查找。

接下来再来看二分查找。二分查找也叫折半查找,二分查找只适用于对有序顺序表进行查找,这样相比较于顺序表二分查找的使用范围就缩小了很多。二分查找在每一次进行折半查找,要么查找成功,结束查找,要么将查找范围缩小一半,如此重复,直到查找成功或者查找范围缩小为空即查找失败为止。接下来我们假设一个有序表,然后查找值为23的元素,如下:
在这里插入图片描述
可以看到图中有low,mid,high三个下标,我们将low这个下标作为起始点,high作为最高点,而mid则是通过(low+high)/2得来的一个值,在查找的过程中通过不断修改是前半段还是后半段从而缩小查找的范围,在这里要求查找23,那么首先计算出mid的值(1+11)/2 = 6,在第六个位置的数据元素就是43,然后56-98这一半就不需要查找了,查找3-43这一半,如下:
在这里插入图片描述
这样重复查找,直到最后找到23查找成功为止,如下:
在这里插入图片描述
接下来是二分查找的完整算法,如下:
在这里插入图片描述
首先设置low = 1,high = n,即设置初始查找的起始点和最高点,k为查找的记录,能够让该查找继续循环执行的条件为low <= high,即存在一个能够继续进行二分查找的区间,如果存在此区间,那么就继续计算mid的值 (low + high)/ 2,然后在判断mid的值是否等于k,即需要查找的记录,如果相等,就返回mid,如果不等,就判断k大于mid还是小于mid,如果k小于mid,那么查找范围缩小到前半段,把high修改为high = mid - 1,如果k大于mid,那么查找范围缩小到后半段,把high修改为high = mid + 1,如此循环执行查找,直到找到与k相等的值(查找成功,返回mid)或者直到区间为空为止(查找失败,返回查找失败的标志)。

以上两种数据查找的算法中,顺序查找适用于查找线性链表,查找时间效率较低,所以不建议用于在数据较多的表中。二分查找只适用于查找顺序表,所以要先将数据表进行排序才能使用,但其查找时间效率较高,在数据较多的数据表中比较适合使用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值