对分查找算法及程序实现.ppt

  1. 1、本文档共25页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 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)

3471161553 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档