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

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
对分查找算法 及程序实现;1.对分查找的概念 对分查找又称二分查找,是一种高效的查找方法。对分查找的前提是,被查找的数据序列是有序的(升序或降序)。 对分查找的基本思想是在有序的数列中,首先将要查找的数据与有序数列内处于中间位置的数据进行比较,如果两者相等,则查找成功;否则就根据数据的有序性,再确定该数据的范围应该在数列的前半部分还是后半部分;在新确定的缩少范围内,继续按上述方法进行查找,直到找到要查找的数据,即查找成功,如果要查找的数据不存在,即查找不成功。;2.对分查找的过程 若key为查找键,数组d存放n个已按升序排序的数据。在使用对分查找时,把查找范围[i,j]的中间位置上的数据d(m)与查找键key进行比较,结果必然是如下三种情况之一: (1)若keyd(m),查找键小于中点d(m)处的数据。由数组d中的数据的递增性,可以确定:在(m,j)内不可能存在值为key的数据,必须在新的范围(i,m-1)中继续查找; (2)key=d(m),找到了需要的数据; (3)keyd(m),查找键大于中点d(m)处的数据。由数组d中的数据的递减性,可以确定:在(i , m)内不可能存在值为key的数据,必须在新的范围(m+1,j)中继续查找。 这样,除了出现情况(2),在通过一次比较后,新的查找范围将不超过上次查找范围的一半。;10;Int、Fix 函数: 返回数字的整数部分。 Int函数和 Fix 函数都删除 number 参数的小数部分并返回以整数表示的结果。 Int 和 Fix 函数的区别在于如果 number 参数为负数时,Int 函数返回小于或等于 number 的第一个负整数,而 Fix 函数返回大于或等于 number 参数的第一个负整数。 例如,Int 将 -8.9 转换为 -9,而 Fix 函数将 -8.9 转换为 -8。 ;10;10;3.对分查找算法的表示 使用对分查找在数组变量d中查找key,用自然语言描述的算法如下: (1)(确定初始查找范围)i←1,j←n。 (2)(是否能继续查找?)如果i≤j,那么转到(4)。 (3)(找不到)输入出结果0,算法结束。 (4)(计算中点位置)m←(i+j)\2。 (5)(相等?)如果d(m)=key,那么转到(7)。 (6)(修改查找范围)如果keyd(m),那么j←m-1;如果 keyd(m),那么i←m+1,转到(2)。 (7)(找到)输出结果m,算法结束。;使用流程图描述对分查找的算法如下图所示:;4.对分查找算法程序的实现要点 (1)由于比较次数难以确定,所以用Do语句来实现循环; (2)在Do循环体中用If语句来判断查找是否成功; (3)若查找成功则输出查找结果,并结束循环(Exit Do); (4)若查找不成功,则判断查找键在数组的左半区间还是右半区间,从而缩小范围。;对分查找程序的基本框架: Private Sub Command1_Click() i = 1: j = n Do While i = j m = (i + j) \ 2 If d(m) = Key Then  输出结果,退出查找(代码略) ElseIf Key d(m) Then   j = m - 1 Else   i = m + 1 End If Loop End Sub;;;;;;例题:对分查找;1、首先在通用声明事件里定义数组d变量为全局变量。 Dim d(1 To 10) As Integer 2、程序一运行,生成10个3位整数,显示在标签1中。 Private Sub Form_Load() Label1.Caption = Randomize For i = 1 To 10 d(i) = Int(Rnd * 101 + 100) Label1.Caption = Label1.Caption d(i) Next i End Sub;3、单击“升序排序”按钮,按从小到大进行排序,并将结果显示在标签2中。 Private Sub Command1_Click() For i = 1 To 9 Min = d(i) For j = i + 1 To 10 If d(j) Min Then Min = d(j) t = d(i): d(i) = d(j): d(j) = t End If Next j Next i Label2.Caption = For i = 1 To 10 Label2.Capti

文档评论(0)

kfcel5889 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档