|
|
《冒泡法排序》教学案例 一、教材分析: 冒泡法排序是处理数据的一个行之有效的常用方法,是教材的重点学习内容。教材通过实例,介绍了最为直观的冒泡排序法,展示了冒泡排序的过程,通过问题的解决达到明确算法的思路,并将思路整理之后能够熟练地转化为程序代码,这当然是教学目的之所在。 二、学情分析: 1、应有知识:数组概念及运用;循环嵌套使用;取数组中的最小值;交换两个变量的值; 2、课前准备:请学生找出现实生活中对数据进行排序后使用的例子;如考试成绩排名或者运动会成绩排名,模拟排序过程; 三、教学目标: 1. 知识与技能: 1)理解数组的概念,学会用简单的数组处理、表示数据. 2)掌握冒泡法排序的原理. 3)掌握冒泡法排序程序的实现和优化. 4)学会用冒泡法对数据进行排序. 2. 过程与方法: 经历分析、实践、讲解、探究、归纳,通过循序渐进、层层深入,逐步深化对循环思想和执行过程的理解。 3.情感、态度与价值观: 1) 积极引导,循循善诱,并一环扣一环,层层分析,同时发挥学生主体作用,步步深入,找出算法规律,使冒泡法排序这个较为复杂抽象的算法变得浅显易懂 2) 通过在实际的问题中分析冒泡法排序结构,从程序设计领域进一步提升学生的信息素养。 四、教学重点、难点: 1) 教学重点:冒泡排序原理及程序实现。 2) 教学难点:① 冒泡排序的程序实现;② 算法及程序的优化。 五、教学方法:演示法、讲授法、讨论法、练习法。 六、课时:1课时 七、教学过程: (一)复习回顾(3分钟) 1、一维数组定义及赋值 2、三个数的排序(从小到大) (二)创设情景、导入(6分钟) 探讨:上星期运动会结束后,各个运动员的成绩已经出来了,请同学 们考虑一下如何排序得出一、二、三名。 学生:可以通过Excel排序功能,或者可以通过编程的方式。 老师:我们今天就一起来讨论如何通过编程的方式来完成排序。请同学们说说有什么方法么? 学生:首先把所有运动员的成绩放在一个数组a(1 to n)里(n为常量,代表运动员人数),然后a(1)分别和a(2)、a(3)、a(4)……a(n)比较,这样a(1)就能得到最高成绩,同样a(2)分别和a(3)、a(4)……a(n)比较,a(2)里就能得到第二高的成绩,以此类推,就能从大到小排序了。 老师:很好,这是一种排序方式,叫选择排序。还有其他方式么? 学生:同样首先把所有运动员的成绩放在一个数组a(1 to n)里(n为常量,代表运动员人数),a(1)和a(2)比较,a(2)和a(3)比较,a(3)和a(4)比较……a(n-1)和a(n)比较,最后a(n)得到最低成绩,接着a(1)和a(2)比较,a(2)和a(3)比较,a(3)和a(4)比较……a(n-2)和a(n-1)比较,最后a(n-1)得到第二低成绩,以此类推,也能从大到小排序。 老师:也对,这也是一种排序方式,叫冒泡排序,是我们今天要讲的重点,其实排序的方式还有很多,如插入排序,合并排序,冒泡排序,选择排序,希尔排序,堆排序,快速排序,计数排序,基数排序等。那么今天我们就冒泡排序做一个深入的了解。 冒泡排序原理:也叫“起泡法排序”,是一种比较简单、易懂的交换排序的方法,它通过将相邻元素进行比较和交换,逐步将一个无序序列排列为一个有序序列。 老师:刚才一位同学的描述其实还需要补充一下,是什么? 学生:数组元素之间比较的同时还需要有条件的交换值。 老师:那么同学们考虑一下:假如有10个运动员成绩,请问要比较多少次呢? 学生:9+8+7+6+5+4+3+2+1次。 老师:很好,为了便于理解,我们可以这样理解,总共比较了9趟,第一趟比较了9次,第二趟比较了8次,以后依次递减 接下来我们看一个flash动画(冒泡排序.swf),五个数相比较,从小到大排列。我们一起看flash动画分析 五个数: 7、3、4、8、1 归纳: 循环趟数 比较结果 比较次数 第一趟 找出最小数: 1—>A(5) 4 依 第二趟 找出第二小数:3—>A(4) 3 次 第三趟 找出第三小数:4—>A(3) 2 递 第四趟 找出第四小数:7—>A(2) 1 减 最大数: 8—>A(1) 归纳小结:N个数相比较,总共要比较N-1趟,第一趟要比较N-1次,以后依次递减 (三)师生互动、层层深入(15分钟) 师:思考:怎么用visual Basic语言表述第一趟的比较 生 :If a(1)< a(2) then t=a(2):a(2)=a(1):a(1)=t If a(2)< a(3) then t=a(3):a(3)=a(2):a(2)=t If a(3)< a(4) then t=a(4):a(4)=a(3):a(3)=t If a(4)< a(5) then t=a(5):a(5)=a(4):a(4)=t 师:很好,那同学们考虑一下有没有更好的表述方式呢? 提示:dim a(1 to 5) as integer dim I,j as integer a(1)= 7:a(2)=3:a(3)=4:a(4)=8:a(5)=1 For j= 1 to step 1 if a(j)<a(j+1) then 交换两个变量的值 Endif Next j 生:同学们根据提示在visual Basic 环境中完善程序 师:思考:怎么用visual Basic语言表述第二趟的比较 For j= 1 to 3 step 1 if a(j)<a(j+1) then 交换两个变量的值 End if Next j 总结:第二趟循环针对4个数经过3次比较,即可利用第一趟比较的程序段来实现找出第二大数,第三、四….趟同样…. 反复利用同一程序段,我们可以把这一程序段作为一循环体,再外加一个循环语句,“FOR i =1 TO N-1……NEXT”,内部本身就是一重循环,这样二重循环就实现了整个排序的过程。在设置循环变量问题上,我们可以根据每一趟比较次数的递减这个特点,来修改内循环变量终止值为“N-i”。 (通过flash动画(程序表示冒泡排序.swf)演示冒泡法排序的运行过程,每循环一趟,显示一个结果。) (四)学生活动(15分钟) 完善程序 要求:一组五个数从小到大排列,输出每一趟比较完后的结果以及每趟比较得到的最小值,第一、二、三、四趟逐行输出。 由学生完成程序的编写,再分析学生的程序,并完善其程序。最后演示并运行程序。 程序: Dim a(1 To 5) As Integer Dim i, j, t, k As Integer a(1)= 7:a(2)=3:a(3)=4:a(4)=8:a(5)=1 For i = 1 To 4 For j = 1 To 5-i Step1 If a(j) < a(j + 1) Then t = a(j) a(j) = a(j + 1) a(j + 1) = t End If Next j For k = 1 To 5 Print a(k); Next k Print a(j) Next i (五)交流评价、归纳总结(1分钟) 1.展示评价A、B组的学生作业,分析学生编程过程中出现的常见问题,如越界问题,循环嵌套的理解。 2.师生互动,总结回顾课堂所学。 3.算法优化的二个要素:运行时间短,占用空间少 (六)内化发散、学以致用 我们学习冒泡法排序的根本目的主要在于帮助我们解决实际的问题。在你日常的学习、生活中,有没有遇到一些排序问题,能否利用我们今天学的冒泡排序结构优化、解决? (七)作业 1、自己独立编写完整的冒泡法排序程序,并调试,运行。 2、请同学们预习用递归法解决问题。 附板书设计: 一、 复习: 二、 新课: 1.什么是冒泡法排序? 2.算法分析 归纳: 循环趟数 比较结果 比较次数 第一趟 找出最小数: 1—>A(1) 4 依 第二趟 找出第二小数:3—>A(2) 3 次 第三趟 找出第三小数:4—>A(3) 2 递 第四趟 找出第四小数:7—>A(4) 1 减 最大数: 8—>A(5) Visual Basic语言表述: FOR i=1 TO N-1 FOR j= N TO i+1 step -1替换 IF a(j)>a(j-1) THEN T=a(j):A(j)=a(j-1):a(j-1)=T NEXT j NEXT i 三、归纳小结: N个数相比较,总共要比较N-1趟,第一趟要比较N-1次,以后依次递减 算法优化的二个要素:运行时间短,占用空间少。 四、作业: 1、自己独立编写完整的冒泡法排序程序,并调试,运行。 2、请同学们预习用递归法解决问题。 教学反思: 本节课运用powerpoint课件和flash动画配合教学,使同学们对冒泡法排序算法印象更加深刻,绝大多数学生都能掌握冒泡法排序算法和程序的编写。学生普遍反应效果好。 教师发挥了主导作用,通过身边的实例启发学生,积极引导,循序渐进、层层深入、由易到难、由具体到抽象、点面结合;同时发挥出了学生主体作用,步步深入,找出算法规律,自己动手编写程序。使冒泡法排序这个较为复杂抽象的算法变得浅显易懂。使用多媒体课件教学与讲解、讨论等教学方法融为一体,多媒体课件为教学提供了一个直观的过程,使得用语言无法讲清的过程变得一目了然;教学效果较佳。为激发和提高学生的逻辑思维能力,提供了一个很好的氛围,体现课堂的开放性,学生对获得的知识进行内化、迁移和应用。
|
|