【设计意图】通过动画课件展示排序过程,帮助学生理解排序原理。
如果用伪代码可表示为:
第1次冒泡排序时需要比较4次, j 从 0 开始到3:
For j=0 to 3
if a(j)>a(j+1) then 交换a(j) 和a(j+1)的值
第2次冒泡排序时需要比较3次, j 从0 开始到2:
For j= 0 to 2
if a(j)>a(j+1) then 交换a(j) 和a(j+1)的值
第3次冒泡排序时需要比较2次, j 从 0 开始到1:
For j= 0 to 1
if a(j)>a(j+1) then 交换a(j) 和a(j+1)的值
第4次冒泡排序时需要比较1次, j 从 0 开始到0:
For j= 0 to 0
if a(j)>a(j+1) then 交换a(j) 和a(j+1)的值
师:如果我们用一个变i(值分别为0,1,2,3)来表示第1趟、第2趟、第3趟、第4趟的话,那我们能不能将上述四段代码合并成一段通用的代码呢?教师展示下图:本论文由论文格式网整理,转载请注明来源www.lwgsw.com,更多论文,请点论文格式范文查看
趟次 I的值 j值变化 j的值
1 0 0 1 2 3 3
2 1 0 1 2 2
3 2 0 1 1
4 3 0 0
生:能(学生讲伪代码)
For j= 0 to 3-i
if a(j)>a(j+1) then 交换a(j) 和a(j+1)的值
其中,I的值为0,1,2,3分别表示第1趟,第2趟,第3趟,第4趟。
师:对,那我们怎样把两者结合起来,在趟次变化时,比较次数也随之发表变化呢?
生:思考
师:提示:通过循环语句输出几何图形的处理方法。
生:可以在刚才的循环外再加一层循环,使i也参与变化,以达到对次数的控制。
师:很好。展示程序:
For I=0 to 3
For j=0 to 3-i
if a(j)>a(j+1) then
t=a(j)
a(j)=a(j+1)
a(j+1)=t
end if
next j
next I
生:小组实践。
师:巡视指导。
师:现在我们是由前向后比较,那如果由后向前比较该怎么办呢?请大家在小组内讨论,找到解决方案的小组举手。
生:老师,只要把控制次数的循环语句改一下就行了,改成 for j=4 to i+1 step -1。
师:很好,那我们来试试,看看能不能实现排序功能呢?
生:调试。学生举手,老师,有错误提示,应该再把判断交换的语句改一下,改成
if a(j)>a(j-1) then
T=a(j)
A(j)=a(j-1)
A(j-1)=t
End if
师:很好,这组同学能根据错误提示“下标越界”发现,当前数组中的值应该与它前面的数进行比较。我们给这组的同学来点掌声。请同学们修改程序实现排序功能。并完成课本P58实践。
【设计意图】学生通过操作,自己发现问题所在,进而找到解决问题的方法,加深学生对冒泡排序的理解。
师生同学总结:
冒泡排序的基本概念是:依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。至此第一趟结束,将最大的数放到了最后。在第二趟:仍从第一对数开始比较(因为可能由于第2个数和第3个数的交换,使得第1个数不再小于第2个数),将小数放前,大数放后,一直比较到倒数第二个数(倒数第一的位置上已经是最大的),第二趟结束,在倒数第二的位置上得到一个新的最大数(其实在整个数列中是第二大的数)。如此下去,重复以上过程,直至最终完成排序。由于在排序过程中总是小数往前放,大数往后放,相当于气泡往上升,所以称作冒泡排序。只要我们遵循一个原则:每一趟的趟数加上该趟的比较次数正好是参加排序数值的个数,那么,这类冒泡排序问题都可以迎刃而解。
八、作业设置
由于有些人使用数组习惯从a(1)开始,如果把数值放在数组a(1),a(2),…a(5)中,那排序的代码是怎样的呢?请大家课后思考!
九、板书设计
For i=0 to ______
For j=0 to ______
If a(j)<a(j+1) then
交换
End if
Next j
Next i
十、教学反思
本节采用对冒泡排序的基本方法进行分析,借助学生排队展示及flash课件,通过伪代码逐步引出双循环和冒泡排序的程序实现,这就要求学生的循环语句基础要好些。另外,由于冒泡排序这部分内容相对比较枯燥,讲授时间相对较多,因此,我及时调节课堂气氛,并让学生进行小组讨论,组与组之间进行比赛,提高学生的参与度,防止学生课内思维疲劳