基本思想
首先将给定值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 |
有什么不对的地方还请指出,一起交流,一起学习。