对分查找算法和程序实现.doc

  1. 1、本文档共8页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
对分查找算法及程序实现 设计者 ?边楚女 单位 浙江省瑞安中学? 教材 浙江教育出版社 算法与程序设计 适用范围 ?选修模块 课时 一?课时 联系方式 bcn@ 一、设计思想 对分查找是计算机科学中的一个基础算法。对于一个基础算法的学习,同样可以让学生在一定的情境下,经历分析问题、确定算法、编程求解等用计算机解决问题的基本过程。本堂课以一个游戏暖场,同时激活学生的思维,引导学生去探索游戏或生活背后的科学原理。为了让学生在教师的引导下能自我解析算法的形成过程,本课分解了问题动作,找出问题的全部可能情况,在对全部可能情况总结归纳的情况下,得出对分查找的基础算法,最后在程序中得到实现,从而使学生建立起对分查找算法形成的科学逻辑结构。 二、教材分析 本课的课程标准内容: (一)计算机解决问题的基本过程(1)结合实例,经历分析问题、确定算法、编程求解等用计算机解决问题的基本过程,认识算法和程序设计在其中的地位和作用。(三)算法与问题解决例举C 查找、排序与问题解决(2)通过实例,掌握使用数据查找算法设计程序解决问题的方法。……。 (2)讨论:你觉得怎么样猜可以猜的快一点呢?有什么技巧吗?你从这个游戏当中得到什么启示?(3分钟) (3)教师引导:这个世界不是缺少问题,而是缺少发现,其实在这个游戏的背后,含有一个非常经典的算法。引出对分查找的的概念。 2、新课: 教学步骤一:分析对分查找的原理和思想。(3分钟) (1)对分查找是效率很高的查找方法,但被查找的数据必须是有序的。 (2)首先将查找的数与有序数组内处于中间位置的数据比较,如果中间位置上的数与查找的数不同,根据有序性,就可确定应该在数组的前半部分还是后半部分继续查找。 (3)在新确定的范围内,继续按上述方法进行查找,直到获得最终结果。 教学步骤二:分解对分查找算法(5分钟) 假设:用一个数组d(1 to 10)来存放升序的元素序列,用i表示查找范围的起始位置的下标,j表示终止位置的下标,mid表示中间位置元素的下标。 第一种情况:要找的值在后半部分; 以查找键KEY=48为例分析 第一次比较: 范围d(1)~d(10),mid= (1+10)\2, d(mid)Key 所以可以确定接下来要找的范围是后半部分。 比较后i=mid+1 第二次比较: 范围d(6)~d(10),mid= (6+10)\2,d(mid)Key 所以可以确定接下来要找的范围是后半部分。 比较后:i=mid+1 第三次比较: 范围d(9)~d(10), mid= (9+10)\2,d(mid)=Key ,找到了。 思考:如果要找的是52? i,j,mid分别是多少? 这也说明当i=j的时候是查找的最后可能次数,这也是终止查找的一个关键条件。 教学步骤三:继续分解对分查找算法中包含的其他情况。 画一画:请仿照上面的画法,分别画出key=17和key=20的查找示意图。 第二种情况:要找的值在前半部分; 以查找键KEY=17为例分析: 结果分析: 第一次比较后:j=mid-1第二次比较后:i=mid+1第三次比较后:找到了 (3)第三种情况:要找的值找不到;以查找键KEY=20为例分析: 结果分析: 第一次比较后:j=mid-1第二次比较后:i=mid+1 第三次比较后:i=mid+1第四次比较:i=j 但是d(mid)≠key,所以找不到。 教学步骤四:对各种情况进行归纳总结。 (1)Key与d(mid)的大小比较影响i,j的取值的规律: i的取值规律:if d(mid)key then i=mid+1 j的取值规律:if d(mid)key then j=mid-1 用分支结构实现。 (2)继续进行重复查找的条件: i≤j,用循环结构实现。 教学步骤五:构建对分查找的流程图 教学步骤六:对分查找算法的初步程序实现。 教师事先设计好Vb窗体,学生只需要在相应的程序体输入代表算法思想的关键语句。 附主要程序体: Private Sub Command2_Click() Dim key As Integer, mid As Integer, i As Integer, j As Integer key = Val(Text1.Text) i = 1: j = 10 Do While i = j mid = (i + j) \ 2 If d(mid) = key Then Text2.Text = 找到了,是第 mid 个 Exit Sub End If If d(mid) key Then i = mid + 1 Else j = mid - 1 End If Loop

文档评论(0)

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

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

1亿VIP精品文档

相关文档