二分查找(折半查找)——查找每个元素的比较次数

基本思想

         首先将给定值K与表中中间位置的关键字比较,若相等,则查找成功,返回该元素的下标;若不等,则所查找的元素只能在中间数据以外前半部分或后半部分。然后在缩小的区间中继续进行同样的查找,如此重复直到找到为止,如果查找区间缩小到只有一个元素,其关键字仍不等于k,则查找失败

每进行一次键值与给定值的比较,查找区间的长度至少减少为原来的二分之一。

 

题目

用二分查找法对一个长度为10的有序表进行查找,填写每一元素需要比较次数,元素下表:

1

2

3

4

5

6

7

8

9

10

填写比较次数

 

 

 

 

 

 

 

 

 

 

Mid=(low+high)/2,在每次比较是可以根据区间查找,如果为奇数的是去最中间一个,若是偶数则向下取整。

第一次

Mid(1+9)/2=5

取第五个数,再此序列的值为5

1

low

2

3

4

5

mid

6

7

8

9

10

high

将此无序序列分成两组,即5之前为一组,5之后为一组。

第二次 ,先排左边

 

1

low

2

3

4

5

mid

6

7

8

9

10

high

Mid(1+4)/2=2.5取2.即2的位置

1

low

2

mid

3

4

high

第三次

在第三趟的时候mid左边只有一个数,即low,high,mid都是这一个数,所以在第三趟的时候1的比较次数已经出来了,接下来就开始比较右边的。

Mid(1+2)/2=1.5  还是向下取整,为1

1

low

Mid

high

完了对右边的经行比较

Mid(1+2)/2=1.5

3

low

4

High

mid

 

此时low,mid,high都为3.所以三的比较次数也出来了。

3

low

Mid

high

第四次

对5左边的最后一组数比较,此时就剩一个数,也就是说low,mid,high都为4,和上面的思想一样。

4

low

Mid

high

依此类推,第一次比较的5右边的序列和左边的比较方法一样。就不一一比较了。

即比较次数如下:

3

2

3

4

1

3

4

2

3

4

有什么不对的地方还请指出,一起交流,一起学习。

发布了137 篇原创文章 · 获赞 55 · 访问量 16万+

猜你喜欢

转载自blog.csdn.net/yyp0304Devin/article/details/100836870