[摘 要] “冒泡排序法”是計(jì)算機(jī)程序設(shè)計(jì)類課程中教學(xué)的重點(diǎn)和難點(diǎn),用普通的教學(xué)方法進(jìn)行教學(xué)往往效果不佳。針對這個問題,分析了普通教學(xué)法存在的問題,研究了一個冒泡排序的口訣教學(xué)法,并用教學(xué)實(shí)驗(yàn)加以檢驗(yàn),結(jié)果表明該口訣教學(xué)法能有效提高教學(xué)效果。

[關(guān)鍵詞] 冒泡排序 口訣 教學(xué)法

基金項(xiàng)目:商洛學(xué)院科研基金項(xiàng)目(10SKY027)。

引 言

高校計(jì)算機(jī)程序設(shè)計(jì)類課程中,數(shù)據(jù)排序的“冒泡排序法”是教學(xué)的重點(diǎn)。冒泡排序法雖然原理簡單,但是過程復(fù)雜,用一般的講授法很難把它講得透徹,所以冒泡排序法又是教學(xué)的難點(diǎn)。學(xué)生往往能聽懂冒泡排序的原理,但不能完全明白交換的過程,也編寫不出冒泡排序的程序。針對這個問題,筆者研究了一個冒泡排序的口訣教學(xué)法,能讓學(xué)生輕松理解和準(zhǔn)確記憶冒泡排序的方法及過程,教學(xué)效果良好。本文以VB語言為例,講述該口訣教學(xué)法,以和同行探討。

冒泡排序法

冒泡排序的基本原理是兩兩比較待排序數(shù)據(jù)的大小,當(dāng)兩個數(shù)據(jù)的次序不滿足順序條件時即進(jìn)行交換,反之,則保持不變,這樣每次最?。ɑ蜃畲螅┑慕Y(jié)點(diǎn)就像氣泡一樣浮到序列的最前位置。[1]

設(shè)有n個數(shù)的序列,即數(shù)組a(1)~a(n),要求按遞增(或遞減)的順序排列,則冒泡排序法的基本算法描述如下:

(1)把a(bǔ)(n)和a(n-1)比較,如果a(n)a(n-1)), 則把a(bǔ)(n)和a(n-1)的值交換。

(2)再將a(n-1)與a(n-2)比較,如果a(n-1)a(n-2)),則把a(bǔ)(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)重復(fù)第(1)、(2)、(3)步進(jìn)行第2輪、第3輪、……、第n-1輪交換。設(shè)輪數(shù)為i,i=1、2、3、……、n-1,每交換一輪,次小值(或次大值)被交換到a(i)里,所以每輪處理到a(i+1)結(jié)束。n-1輪交換都完成后,數(shù)據(jù)按遞增(或遞減)的順序排列。

冒泡排序的口訣教學(xué)法

1.冒泡排序的普通教學(xué)法及存在的問題

講授冒泡排序的普通方法是先講述冒泡排序的原理,然后講述冒泡排序的過程,并用幾個數(shù)詳細(xì)寫出冒泡排序的過程進(jìn)行演示,最后給出冒泡排序的程序。

由于冒泡排序的過程繁瑣復(fù)雜,講述冒泡排序的過程及進(jìn)行數(shù)值演示只能讓學(xué)生從枝節(jié)上看到一個個數(shù)值被排好序,并不能帶給學(xué)生整體性和總結(jié)性的認(rèn)識,交換的過程學(xué)生也容易記錯。另外,數(shù)據(jù)交換的過程和程序的書寫之間脫節(jié),學(xué)生很難明白怎么對應(yīng)數(shù)據(jù)的交換過程寫出相應(yīng)的程序。所以,用普通的教學(xué)方法整體教學(xué)效果不佳。

2.口訣教學(xué)法

口訣具有形象生動、簡潔明快、重點(diǎn)突出、上口易記、富有韻律的特點(diǎn)[2]??谠E教學(xué)法是教師把所講授的知識編成口訣,通過口訣進(jìn)行教學(xué),使學(xué)生易于理解、記憶、學(xué)習(xí)和掌握的教學(xué)方法[3]??谠E教學(xué)法能高度概括并提煉基本知識的共性,并以形象貼切、瑯瑯上口、有韻律的詩化語言總結(jié)要點(diǎn)[4],能激發(fā)學(xué)生的學(xué)習(xí)興趣,幫助學(xué)生理解和掌握知識規(guī)律,有助于學(xué)生長久記憶知識[5]。采用口訣教學(xué)法常常能取得良好的教學(xué)效果。

3.冒泡排序的口訣教學(xué)法

針對冒泡排序的普通教學(xué)法存在的問題,筆者研究和總結(jié)了冒泡排序的口訣教學(xué)法,現(xiàn)介紹如下:

(1)冒泡排序的口訣

對于n個數(shù)的排序,冒泡排序進(jìn)行n-1輪比較。每輪比較時一般是從后往前把相鄰的兩個數(shù)依次比較,順序不對就交換位置。這樣每比較一輪就排好一個數(shù),比較n-1輪之后這n個數(shù)就都排好了。針對該過程,可以總結(jié)出如下口訣:

循環(huán)n-1次,

從后往前,

兩個兩個比較,

順序不對就交換。

(2)對冒泡排序口訣的分析

這個口訣只有四句,簡單易記,雖然沒有合轍押韻,但也朗朗上口,交換的過程被簡明扼要地總結(jié)了起來??梢允箤W(xué)生輕松理解交換的過程,準(zhǔn)確記憶交換的方法。

按照這個口訣,也很容易就能寫出冒泡排序的程序?!把h(huán)n-1次”,學(xué)生自然就能寫出“For i=1 To n-1”;“從后往前”,學(xué)生就能寫出“For j=n To 1 Step -1”,而第i輪處理時,不必檢查第i個位置以前的元素,因?yàn)榻?jīng)過前i-1輪的處理,它們已正確地排好序[6],所以這句程序可改寫為“For j=n To i+1 Step -1”,以減少運(yùn)算次數(shù);“兩個兩個比較”,學(xué)生自然就能寫出“If a(j-1)>a(j) Then”;“順序不對就交換”當(dāng)然就是兩個數(shù)交換的典型結(jié)構(gòu)“t=a(j):a(j)=a(j-1):a(j-1)=t”。剩下的就是把If語句和For循環(huán)補(bǔ)全了,對學(xué)生來說都很簡單。

可見通過這個口訣,可以給學(xué)生帶來整體上和總結(jié)性的認(rèn)識,利于學(xué)生理解和識記冒泡排序的過程和方法,便于寫出相關(guān)的程序。

(3)冒泡排序口訣教學(xué)的具體方法

給學(xué)生講授冒泡排序法時,先講述冒泡排序的基本原理,即從后往前把相鄰的兩個數(shù)依次比較,這個原理比較簡單,學(xué)生一般是能聽懂的,可以用“像氣泡一樣往上冒”的比喻讓學(xué)生加深理解。

然后介紹冒泡排序的過程,即從后往前把相鄰的兩個數(shù)依次比較,當(dāng)次序不對就交換位置,每比較一輪就排好一個數(shù),如此循環(huán)比較n-1輪。此時把這個交換的過程總結(jié)為冒泡排序的口訣,給學(xué)生一個整體上的認(rèn)識。接下來給出幾個數(shù)詳細(xì)寫出冒泡排序的過程進(jìn)行演示,演示的過程不是用陳述性的語言,而是用口訣進(jìn)行描述。相比陳述性的語言,口訣更加清晰,更容易接受和記憶。

接著給出冒泡排序的程序。寫程序時,每念一句口訣,相應(yīng)的寫出一句程序,并用口訣對程序進(jìn)行注釋,如下所示:

For i=1 To n-1 ’ 循環(huán)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

可以看到,該口訣能完美的充當(dāng)冒泡排序程序的注釋。這樣,學(xué)生記住了口訣就能寫出相應(yīng)的程序,也借用口訣把冒泡排序交換的過程和程序的書寫聯(lián)系了起來,使學(xué)生很自然的從交換的過程過渡到程序的書寫。

最后用陳述性的語言和口訣對冒泡排序加以總結(jié),增強(qiáng)學(xué)生的理解和認(rèn)知,完成教學(xué)任務(wù)。

使用該教學(xué)法要注意的問題

使用該教學(xué)法要注意的問題主要有以下兩個:

(1)冒泡排序法既可以從后往前交換,也可以從前往后交換,一般教學(xué)時是以從后往前為例的,但也要告訴學(xué)生從前往后也是可以的,并舉一個例子。

(2)因?yàn)槊拷粨Q一輪,數(shù)組前面就排好了一個數(shù),所以程序的第二句“For j=n To 1 Step -1”可改寫為“For j=n To i+1 Step -1”,以減少運(yùn)算次數(shù)。雖然不改寫程序也能正常運(yùn)行,但在數(shù)據(jù)個數(shù)較多時效率不高,所以要叮囑學(xué)生注意這一點(diǎn)。

教學(xué)實(shí)驗(yàn)

筆者對所在學(xué)校某屆大二年級應(yīng)用數(shù)學(xué)專業(yè)一班和二班分別采用普通教學(xué)法和該口訣教學(xué)法進(jìn)行教學(xué),理論課結(jié)束后在上機(jī)課時進(jìn)行隨堂測驗(yàn),結(jié)果如表1所示:

表1 教學(xué)效果對照表

注:與普通教學(xué)法相比,*P<0 .05,**p<0.01

教學(xué)實(shí)驗(yàn)表明,冒泡排序的口訣教學(xué)法能有效提高教學(xué)效果。

結(jié) 論

冒泡排序的口訣教學(xué)法能帶給學(xué)生整體性和總結(jié)性的認(rèn)識,使學(xué)生易于理解和準(zhǔn)確記憶數(shù)據(jù)交換的過程,能從交換的過程順利的過渡到程序的書寫,使學(xué)生更好地掌握冒泡排序法。總而言之,冒泡排序的口訣教學(xué)法能有效提高教學(xué)效果。

參考文獻(xiàn):

[1]趙轉(zhuǎn)莉,郭紅山. C語言中冒泡排序教學(xué)方法芻議[J]. 辦公自動化(綜合版),2007(5).

[2]王國林.創(chuàng)編體育口訣應(yīng)把握的五個原則[J].體育師友,2004(5).

[3]楊玉華.高中數(shù)學(xué)口訣在教學(xué)中的應(yīng)用[J].學(xué)園,2010(18).

[4]楊朝霞.談計(jì)算機(jī)課程教學(xué)中詩化口訣的應(yīng)用[J]. 甘肅科技,2005,21(4).

[5]聶萬春.淺談口訣記憶教學(xué)法在教學(xué)中的作用[J].才智,2011(11).

[6]周李涌,高鷺.雙向思維的教學(xué)方法在冒泡排序及其改進(jìn)算法中的教學(xué)設(shè)計(jì)[J].科技信息,2009(24).