- 1、本文档共25页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
对分查找算法
及程序实现
对分查找的概念
查找的前提是,被查找的数据序列是有序的(升序或降房
对分查找又称二分查找,是一种高效的查找方法。对
对分查找的基本思想是在有序的数列中,首先将要查找
的数据与有序数列内处于中间位置的数据进行比较,如果两
者相等,则查找成功;否则就根据数据的有序性,再确定该
数据的范围应该在数列的前半部分还是后半部分;在新确定
的缩少范围内,继续按上述方法进行查找,直到找到要查找
的数据,即查找成功,如果要查找的数据不存在,即查找不
成功。
注:变量定义描述:假设将查找的那个数定义为一个变量key,
数组d(有n个数据)的中间位置定义为变量m,变量记录查找范
围内的第一个元素的下标,变量的初值为1,变量j记录查找
范围内最后一个数组元素的下标,变量j的初值为n
2.对分查找的过程
若key为查找键,数组d放n个已按升序排序的数据。在使用
对分查找时,把查找范围[i,j的中间位置上的数据dm)与查找键
key进行比较,结果必然是如下三种情况之
(1)若key<d(m),查找键小于中点d(m)处的数据。由数组d中的
数据的递增性,可以确定:在(m,j内不可能存在值为key的数据
,必须在新的范围G,m-1)中继续查找
(2)key=d(m),找到了需要的数据
(3)key>d(m,查找键大于中点dm)处的数据。由数组d中的数
据的递减性,可以确定:在(i,m)内不可能存在值为key的数据,必
须在新的范围m+1,j中继续查找。
这样,除了出现情况(2),在通过一次比较后,新的查找范围
将不超过上次查找范围的一半。
元素
下标
(1)过程
15
我们用变量I和J记录所
要查找范围的起始和终止
位置
Key=52
123456789
m=(i+j)2
数组d():
或m=fix(i+j)/2)=8
第1次比较后:
Key>d(m)
查找范围应该
13
变成d(9)-d(16)
16
j=16
nt、Fix函数:
返回数字的整数部分。
nt函数和Fx函数都删除 number参数的小数部分并
返回以整数表示的结果
nt和Fix函数的区别在于如果 number参数为负数时
int函数返回小于或等于 number的第一个负整数,而
斤iⅸ函数返回大于或等于 number参数的第一个负整数。
例如,lnt将-89转换为-9,而Fⅸx函数将-8.9转换
为-8
数组d(
下标元素
Key=52
10
215
我们用变量I和J记录所
522
要查找范围的起始和终止6
第2次比较后
位置
Key<d(m)
845
查找范围应该
9
变成d(9)~d11)
1267
m=fix((1+1/2)
12
1597
16
下标元素
10
15
Key=52
第3次比较后
找到了
1052
m=fix((1+1)/2)
10
j=11
1485
1597
3.对分查找算法的表示
使用对分查找在数组变量d中查找key,用自然语言描述的算
法如下:
(1)(确定初始査找范围)←1,j←n。
(2)(是否能继续查找?)如果,那么转到(4)。
(3)找不到输入出结果0,算法结束。
(4)(计算中点位置)m←(i+j)2。
(5)(相等?)如果d(m)=key,那么转到(7)。
(6)(修改查找范围)如果key<d(m),那么j←m-1;如果
key>d(m),那么im+1,转到(2)。
(7)找到输出结果m,算法结東。
说明:对分查找最多次数应该是log2n,取整
后加1
例如:log216=4
Log(对数函数)如果。b=n,那么ogn=b。其中,a叫做“底数”,n叫做“真数”,b叫做“以a为底的n的对数
使用流程图描述对分查找的算法如下图所示
廾始
算中点m
找到,输出结
d(m)-key?
我到,输出结果:
im十
对分查找算法程序的实现要点
(1)由于比较次数难以确定,所以用Do语句来实现循环
(2)在Do循环体中用I语句来判断查找是否成功
(3)若査找成功则输出査找结果,并结束循环( Exit do);
(4)若查找不成功,则判断查找键在数组的左半区间还是
右半区间,从而缩小范围
文档评论(0)