[摘 要] “冒泡排序法”是计算机程序设计类课程中教学的重点和难点,用普通的教学方法进行教学往往效果不佳。针对这个问题,分析了普通教学法存在的问题,研究了一个冒泡排序的口诀教学法,并用教学实验加以检验,结果表明该口诀教学法能有效提高教学效果。

[关键词] 冒泡排序 口诀 教学法

基金项目:商洛学院科研基金项目(10SKY027)。

引 言

高校计算机程序设计类课程中,数据排序的“冒泡排序法”是教学的重点。冒泡排序法虽然原理简单,但是过程复杂,用一般的讲授法很难把它讲得透彻,所以冒泡排序法又是教学的难点。学生往往能听懂冒泡排序的原理,但不能完全明白交换的过程,也编写不出冒泡排序的程序。针对这个问题,笔者研究了一个冒泡排序的口诀教学法,能让学生轻松理解和准确记忆冒泡排序的方法及过程,教学效果良好。本文以VB语言为例,讲述该口诀教学法,以和同行探讨。

冒泡排序法

冒泡排序的基本原理是两两比较待排序数据的大小,当两个数据的次序不满足顺序条件时即进行交换,反之,则保持不变,这样每次最小(或最大)的结点就像气泡一样浮到序列的最前位置。[1]

设有n个数的序列,即数组a(1)~a(n),要求按递增(或递减)的顺序排列,则冒泡排序法的基本算法描述如下:

(1)把a(n)和a(n-1)比较,如果a(n)a(n-1)), 则把a(n)和a(n-1)的值交换。

(2)再将a(n-1)与a(n-2)比较,如果a(n-1)a(n-2)),则把a(n-1)和a(n-2)的值交换。

(3)按第(2)步的方法处理a(n-2)、a(n-3)、a(n-4)、……、a(2)。

(4)第(1)、(2)、(3)步组成一轮交换,交换完成后最小值(或最大值)被交换到a(1)里。

(5)重复第(1)、(2)、(3)步进行第2轮、第3轮、……、第n-1轮交换。设轮数为i,i=1、2、3、……、n-1,每交换一轮,次小值(或次大值)被交换到a(i)里,所以每轮处理到a(i+1)结束。n-1轮交换都完成后,数据按递增(或递减)的顺序排列。

冒泡排序的口诀教学法

1.冒泡排序的普通教学法及存在的问题

讲授冒泡排序的普通方法是先讲述冒泡排序的原理,然后讲述冒泡排序的过程,并用几个数详细写出冒泡排序的过程进行演示,最后给出冒泡排序的程序。

由于冒泡排序的过程繁琐复杂,讲述冒泡排序的过程及进行数值演示只能让学生从枝节上看到一个个数值被排好序,并不能带给学生整体性和总结性的认识,交换的过程学生也容易记错。另外,数据交换的过程和程序的书写之间脱节,学生很难明白怎么对应数据的交换过程写出相应的程序。所以,用普通的教学方法整体教学效果不佳。

2.口诀教学法

口诀具有形象生动、简洁明快、重点突出、上口易记、富有韵律的特点[2]。口诀教学法是教师把所讲授的知识编成口诀,通过口诀进行教学,使学生易于理解、记忆、学习和掌握的教学方法[3]。口诀教学法能高度概括并提炼基本知识的共性,并以形象贴切、琅琅上口、有韵律的诗化语言总结要点[4],能激发学生的学习兴趣,帮助学生理解和掌握知识规律,有助于学生长久记忆知识[5]。采用口诀教学法常常能取得良好的教学效果。

3.冒泡排序的口诀教学法

针对冒泡排序的普通教学法存在的问题,笔者研究和总结了冒泡排序的口诀教学法,现介绍如下:

(1)冒泡排序的口诀

对于n个数的排序,冒泡排序进行n-1轮比较。每轮比较时一般是从后往前把相邻的两个数依次比较,顺序不对就交换位置。这样每比较一轮就排好一个数,比较n-1轮之后这n个数就都排好了。针对该过程,可以总结出如下口诀:

循环n-1次,

从后往前,

两个两个比较,

顺序不对就交换。

(2)对冒泡排序口诀的分析

这个口诀只有四句,简单易记,虽然没有合辙押韵,但也朗朗上口,交换的过程被简明扼要地总结了起来。可以使学生轻松理解交换的过程,准确记忆交换的方法。

按照这个口诀,也很容易就能写出冒泡排序的程序。“循环n-1次”,学生自然就能写出“For i=1 To n-1”;“从后往前”,学生就能写出“For j=n To 1 Step -1”,而第i轮处理时,不必检查第i个位置以前的元素,因为经过前i-1轮的处理,它们已正确地排好序[6],所以这句程序可改写为“For j=n To i+1 Step -1”,以减少运算次数;“两个两个比较”,学生自然就能写出“If a(j-1)>a(j) Then”;“顺序不对就交换”当然就是两个数交换的典型结构“t=a(j):a(j)=a(j-1):a(j-1)=t”。剩下的就是把If语句和For循环补全了,对学生来说都很简单。

可见通过这个口诀,可以给学生带来整体上和总结性的认识,利于学生理解和识记冒泡排序的过程和方法,便于写出相关的程序。

(3)冒泡排序口诀教学的具体方法

给学生讲授冒泡排序法时,先讲述冒泡排序的基本原理,即从后往前把相邻的两个数依次比较,这个原理比较简单,学生一般是能听懂的,可以用“像气泡一样往上冒”的比喻让学生加深理解。

然后介绍冒泡排序的过程,即从后往前把相邻的两个数依次比较,当次序不对就交换位置,每比较一轮就排好一个数,如此循环比较n-1轮。此时把这个交换的过程总结为冒泡排序的口诀,给学生一个整体上的认识。接下来给出几个数详细写出冒泡排序的过程进行演示,演示的过程不是用陈述性的语言,而是用口诀进行描述。相比陈述性的语言,口诀更加清晰,更容易接受和记忆。

接着给出冒泡排序的程序。写程序时,每念一句口诀,相应的写出一句程序,并用口诀对程序进行注释,如下所示:

For i=1 To n-1 ’ 循环n-1次

For j=n To i+1 Step -1 ’ 从后往前

If a(j-1)>a(j) Then ’ 两个两个比较

t=a(j):a(j)=a(j-1):a(j-1)=t ’ 顺序不对就交换

End If

Next j

Next i

可以看到,该口诀能完美的充当冒泡排序程序的注释。这样,学生记住了口诀就能写出相应的程序,也借用口诀把冒泡排序交换的过程和程序的书写联系了起来,使学生很自然的从交换的过程过渡到程序的书写。

最后用陈述性的语言和口诀对冒泡排序加以总结,增强学生的理解和认知,完成教学任务。

使用该教学法要注意的问题

使用该教学法要注意的问题主要有以下两个:

(1)冒泡排序法既可以从后往前交换,也可以从前往后交换,一般教学时是以从后往前为例的,但也要告诉学生从前往后也是可以的,并举一个例子。

(2)因为每交换一轮,数组前面就排好了一个数,所以程序的第二句“For j=n To 1 Step -1”可改写为“For j=n To i+1 Step -1”,以减少运算次数。虽然不改写程序也能正常运行,但在数据个数较多时效率不高,所以要叮嘱学生注意这一点。

教学实验

笔者对所在学校某届大二年级应用数学专业一班和二班分别采用普通教学法和该口诀教学法进行教学,理论课结束后在上机课时进行随堂测验,结果如表1所示:

表1 教学效果对照表

注:与普通教学法相比,*P<0 .05,**p<0.01

教学实验表明,冒泡排序的口诀教学法能有效提高教学效果。

结 论

冒泡排序的口诀教学法能带给学生整体性和总结性的认识,使学生易于理解和准确记忆数据交换的过程,能从交换的过程顺利的过渡到程序的书写,使学生更好地掌握冒泡排序法。总而言之,冒泡排序的口诀教学法能有效提高教学效果。

参考文献:

[1]赵转莉,郭红山. C语言中冒泡排序教学方法刍议[J]. 办公自动化(综合版),2007(5).

[2]王国林.创编体育口诀应把握的五个原则[J].体育师友,2004(5).

[3]杨玉华.高中数学口诀在教学中的应用[J].学园,2010(18).

[4]杨朝霞.谈计算机课程教学中诗化口诀的应用[J]. 甘肃科技,2005,21(4).

[5]聂万春.浅谈口诀记忆教学法在教学中的作用[J].才智,2011(11).

[6]周李涌,高鹭.双向思维的教学方法在冒泡排序及其改进算法中的教学设计[J].科技信息,2009(24).