排序算法的程序实现
——冒泡排序
一、教学内容分析
本节课是浙江教育出版社《算法与程序设计》第5章第3节“排序算法的程序实现”中学生的实践体验活动,是排序算法程序实现的第1学时(排序算法程序实现共安排3学时)。实践体验活动是本章最重要的活动形式,我们要采用各种办法让学生获得成功的体验。所以,这节课的主要内容是学习使用程序设计语言VB,编制在第2章学习过的冒泡排序算法的有关实例的程序,并在计算机上实现冒泡排序算法。通过这样的学习,提高学生的程序设计能力,能够对一些简单的实际问题,设计算法编制程序并在计算机上实现,为今后在算法与程序设计方面的进一步研究和学习打下基础。
二、学生情况分析
在第2章算法实例的学习中,学生已经了解什么是冒泡排序算法,怎样用冒泡排序算法来解决实际问题的基本思路。在第三、四章,已经学习了面向对象程序设计的基本知识和程序设计语言VB,为本算法的程序实现作好了铺垫。
三、教学目标
目标维度
行为目标
知识与技能
1、掌握冒泡排序的基本思路。
2、通过程序的实现进一步理解冒泡排序的意义和特点。
3、提高学生综合运用各种基本语句的能力。
4、增强学生的知识迁移应用能力。
过程与方法
1、通过实例,体会冒泡排序的基本过程。
2、体验探究学习的过程,获得成功的体验。
情感态度与价值观
1、增强学生通过设计算法编写程序解决实际问题的自信心。
2、激发学生进一步学习算法和VB程序的热情。
四、教学重点难点
重点:一遍加工过程的分解、一遍加工过程的程序实现、冒泡排序的优化
难点:一遍加工下标变量范围的确定、程序的优化
五、教学方法
主要教法:讲授法、任务驱动法
主要学法:自主探究、循序渐进
六、教学资源
教师用资源:教学演示文稿(PPT)、NBA球员得分统计表(XLS)、“冒泡排序”源程序(半成品)
学生用资源:教学导学案
七、教学过程
(一)创设任务情境
用Excel展示一张“NBA球员得分统计表”
师:想要知道哪个球员的场均得分最高,有什么最简单的方法?
生:排序。
(演示)教师用工具栏中的升、降序按钮,很快就得到了结果。
师:看来,排序功能在我们日常生活中非常有用哦,今天,我们就来做一个程序开发者,用VB工具编写一个带有排序功能的小程序。
(设计意图)通过创设情境激发学生的学习兴趣。
(二)激活原有知识
师:实现排序的算法有很多,这节课我们就来学习其中的一种算法——冒泡排序。在第2章我们学习过冒泡排序算法,它的基本思想是怎么样的?
生:把待排序的数据看成是垂直堆放的一列数据,从下往上一个个比较、逆序交换,经过一遍加工使最小的数冒泡到第一个位置,再经过多遍加工,直到整列数据有序。
师:已知4个同学的身高,我们把他们进行从低到高排序,用冒泡排序算法把排序过程模拟一下。
师生共同模拟4个数据的排序,完成下方的表格:
(三)构建新知识
师:冒泡排序的算法我们都了解了,能不能用VB编制成程序呢?
生:沉默、好像有点难。
师:我们一步步来,在编制程序代码时,第一步我们要做什么?
生:定义变量。
师:回顾刚才我们来分析一下要定义几个变量?
学生讨论并得出结果。
师:我们现在的任务就是把刚才的算法过程能用VB语句表达出来,首先我们来完成最里层的任务,也是冒泡排序的核心特征:相邻两两比较,逆序交换。
师:刚开始时,是哪两个数据相比较?
生:172与183
师:换句话说也就是比较a(4)与?
生:a(3)
师:通用的说法是a(j)与?
生:a(j-1)
师:也就是说a(j)与a(j-1)进行比较,“如果a(j)< a(j-1),则交换a(j)与a(j-1)”,请同学们试试把这句话转换为程序。
学生完成if语句和交换。
师:接下来确定‘怎么实现一遍加工?’,刚才手工冒泡模拟过程中,我们不断地在做a(j)与a(j-1)两个数的比较及交换,这里面,只是下标j不断地在变,第一遍加工时,j分别取了哪些值?
生:4、3、2。
师:第二遍加工呢?
生:4、3。
师:第三遍加工呢?
生:4。
师:观察这些取值与已知变量之间的关系,可以得出什么结论?
师:每遍加工的初值都是4,也就是哪个变量的值?
生:n
师:每遍加工的终值又跟哪个变量息息相关呢?
生: i
师:跟i有什么关系?
生:i+1
师:我们可以把它总结为,一遍加工过程是“j由n到i+1,如果a(j)比a(j-1)少,则交换a(j)与a(j-1)”的过程,根据这样的相互关系,重复工作的事情,我们可以交给什么语句来完成?
生:用for语句。
师生一起在块IF语句外面书写For语句。
师:最后确定总共进行几遍加工?
师生一起用不完全归纳法,推出n个数据要有序,用冒泡排序算法要进行n-1遍加工。
师:把这个结论用到哪里呢?
生:沉默。
师:刚才的For语句是实现什么工作?
生:一遍加工。
师:要让这个加工过程重复执行n-1遍,应该用什么语句?
生:循环语句。
师:这个循环语句应该写在什么地方?
生:刚才For语句的外面。
师生一起完成外层循环的语句,并在VB中进行验证代码正确与否。
师:能否总结出冒泡排序的结构特征?
生:双重循环里嵌套一个选择语句。
师:这个选择语句要实现什么功能?
生:相邻两数比较交换。
师:所以,冒泡排序的结构特征应该是?
生:双重循环里嵌套一个实现相邻两数比较交换的选择语句。
(设计意图)以4个数为例展开教学,本着由里到外,由具体到抽象的原则,通过3个任务循序渐进、逐步实现冒泡排序算法,并调试程序,验证结果,分解了程序的神秘并让学生获得了成功的体验,而最后结构特征的总结起到画龙点睛地作用,有助于学生熟识冒泡排序的程序结构。
(四)触类旁通,深入理解
1、如果要改为降序排序,怎么修改程序?
生自主发现升/降序功能地关键性语句,完成降序的程序实现。
2、出示一组经过两遍加工就完成有序的数据,引出算法的优化,使程序更“低碳”。
师生一起推导出优化的思路:某一遍加工过程中没有数据交换,说明数据已有序,无需进一步加工。
运用这个思路完成冒泡排序算法的优化。
3、通过一个实例引出下沉式冒泡,让学生对冒泡有更深层次的理解:可以从下往上冒,也可以从下往下沉。
(设计意图)通过3个任务的拓展,达到对冒泡排序算法的总结提升,构建并完善知识体系。
(五)总结提升
1、课堂小结
师生共同总结,了解学生对本节课重、难点的把握程度,提高学生对知识的梳理能力和口头表达能力。
2、通过一段程序代码设疑,为下节课的选择排序的程序实现做铺垫。
3、布置作业:完成导学案中的课后作业。