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

[關鍵詞] 冒泡排序 口訣 教學法

基金項目:商洛學院科研基金項目(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).