【数据结构】折半查找(二分查找)

例题.在有序表{7,14,18,21,23,29,31,35,38}中查找18.

【解析】

对于折半查找有序表里面其中的一个元素的话我们需要注意以下几点

>首先我们需要将表中的元素从小到大排序,由于题目中已经说了是有序表所以我们不需要将这些元素排序(切记这一步很重要)

>由于是折半查找顾名思义也就是将表中的元素拆分成一半缩小范围来查找,所以我们需要引入2个变量low和high以及mid,其中low标志每一次折半首元素,high标志位每一次折半的尾元素,mid表示为中间元素。

弄清楚了上面的2个概念的话接下来我们需要画图来演示怎么查找

【先将元素存入顺序表中】

【第一次比较】

从题目中可以看出第一次查找mid=(9+!)/2=5,其值为23,因为23>18此时我们需要将high移到mid的左侧此时high=4

【第二次比较】

第二次查找的时候mid=(4+1)/2=2此时其值为14,由于14<18,所以需要将low移到mid的右边此时low=3

【第三次比较】

第三次查找mid=(3+4)/2=3,此时其值为18,由于18=【18】,也就是我们需要查找的,故查找结束。

【注意】

在这里我需要补充下,首先是我们求mid,这里mid=(low+high)/2,这里的结果是取整

其次就是我们算出mid之后mid对应的值,如果mid对应的值大于我们需要查找的值,那么high将右移到mid的左边

如果mid对应的值小于我们需要查找的值,那么low将移到mid的右边

【补充】

上述的讲解是一种类型,还有另外一种题型就是算使用折半查找关键字需要比较的次数最多或者最少是多少。

例题:对100个数据元素采用折半查找法,最大比较次数为( B)。
A.6
B.7
C.8
D.9
解析:这里我们直接套公式来算[log2(n)]+1次,这里男100,所以计算结果为6+1=7

发布了196 篇原创文章 · 获赞 581 · 访问量 47万+

猜你喜欢

转载自blog.csdn.net/wyf2017/article/details/88575447
今日推荐