李冬梅
摘 要 在程序設(shè)計語言中,排序算法是要求學(xué)生重點(diǎn)掌握的知識點(diǎn)。傳統(tǒng)的教學(xué)手段往往效果欠佳。本文以冒泡排序?yàn)槔?,結(jié)合口訣教學(xué),綜合運(yùn)用了情景導(dǎo)入,動畫演示等多媒體手段,采用啟發(fā)引導(dǎo)、分組討論等方式很好講授了冒泡排序的原理及代碼實(shí)現(xiàn)。實(shí)踐證明通過這種教學(xué)手段可以有效提高教學(xué)質(zhì)量。
關(guān)鍵詞 冒泡排序 口訣 多媒體手段 教學(xué)方法
中圖分類號:TP311 文獻(xiàn)標(biāo)識碼:A
0引言
排序是計算機(jī)中使用頻率很高又相對重要的算法,在實(shí)際生活中,很多應(yīng)用都會用到排序,因此人們研究了很多排序算法。冒泡排序因?yàn)樵砗唵味挥糜谥v解排序方法的首選算法。但冒泡排序過程繁瑣,如果依舊沿用傳統(tǒng)的以教師講授為主的教學(xué)手段,很難激發(fā)學(xué)生的學(xué)習(xí)熱情,學(xué)生在聽了枯燥無味的講解后,也很難寫出對應(yīng)的C程序。因此,為了取得更好的教學(xué)效果,在講授排序算法的過程中,可以把豐富多樣的教學(xué)手段引入課程。本文以冒泡排序的講授過程為例探討更適合學(xué)生的教學(xué)手段。
1教學(xué)過程設(shè)計
1.1從玩轉(zhuǎn)撲克牌引入新知識
上課前,按照班級人數(shù),每5個同學(xué)分為一組,給每位同學(xué)隨機(jī)發(fā)放一張撲克牌,要求每一組同學(xué)把自己手里的撲克牌按照從小到大的順序進(jìn)行排列。讓學(xué)生以組為單位展開討論,在幾分鐘的討論結(jié)束之后,隨機(jī)挑選幾組對結(jié)果進(jìn)行評判。通過這種方式,不僅活躍了上課氣氛,調(diào)動了學(xué)生學(xué)習(xí)的熱情,又能引起大家對接下來要介紹的排序算法的重視。
1.2動態(tài)演示冒泡排序
為了加深學(xué)生對冒泡排序的理解,本文以5個卡通人物為例,通過flash動畫演示對這5個卡通人物按照個子高低進(jìn)行排序來講解冒泡排序。如圖1所示。通過動作按鈕的控制,學(xué)生可以直觀看到5個卡通人物的排序共需進(jìn)行4趟。每趟排序過程中的特點(diǎn)及每趟結(jié)束后的效果都可由學(xué)生進(jìn)行總結(jié),引導(dǎo)學(xué)生對冒泡排序原理的歸納。
1.3通過PPT動畫分解排序步驟
給出5個隨機(jī)數(shù)據(jù){91,76,89,21,6},要求把這5個數(shù)據(jù)進(jìn)行有序排列(如從小到大)。用PPT動畫分解每趟排序過程。
(1)第一趟排序:從前到后進(jìn)行遍歷,首先比較91和76,因?yàn)?1大于76,隨機(jī)將這2個數(shù)據(jù)的位置進(jìn)行交換。接下來比較91和89,因?yàn)槟嫘颍◤拇蟮叫。?,繼續(xù)交換兩者的位置。以此類推。在進(jìn)行4次比較之后,數(shù)據(jù)91移動到了最后一個位置。
(2)第二趟排序:對剩下的4個數(shù){76,89,21,6}進(jìn)行排序,按照相同的方法,第二趟排序結(jié)束將數(shù)值89移動到倒數(shù)第二個位置。
(3)第三趟排序:對剩余的3個數(shù){76,21,6}進(jìn)行排序,在2次比較之后,將數(shù)值76移動到倒數(shù)第三個位置。
(4)第四趟排序:對剩余的2個數(shù){21,6}進(jìn)行1次比較,將數(shù)值21移動到倒數(shù)第四個位置。
動畫演示完畢,引導(dǎo)學(xué)生總結(jié)排序過程的規(guī)律:(1)n個數(shù)據(jù)的排序需要進(jìn)行n-1趟;(2)每趟需要比較n-i次(i代表趟,從1開始)。
1.4口訣教學(xué)引出程序核心代碼
依據(jù)冒泡排序的原理分析,對n個數(shù)據(jù)按照正序進(jìn)行排序的口訣可歸納如下:排序進(jìn)行n-1趟,從前往后,兩兩比較,順序不對互換位置。
在講解時,指導(dǎo)學(xué)生寫出對應(yīng)的C代碼。
for(i=1;i for(j=0;j if(a[j]>a[j+1]) /*兩兩比較*/ {temp=a[j]; a[j]=a[j+1];a[j+1]=temp;} /*順序不對交換位置*/ 以往的教學(xué)中,雖然學(xué)生理解了冒泡排序的原理,但依舊很難寫出對應(yīng)的C算法且容易出錯。這4句口訣高度歸納了冒泡排序的原理,簡單易懂,學(xué)生可以快速把每句口訣轉(zhuǎn)換為對應(yīng)的C代碼。 1.5算法改進(jìn) 以上代碼可以實(shí)現(xiàn)對n個數(shù)據(jù)的排列,但執(zhí)行效率并不高。教師在上課過程中可引導(dǎo)學(xué)生提出改進(jìn)意見。通過細(xì)心觀察可以發(fā)現(xiàn),對n個數(shù)據(jù)的排序不一定進(jìn)行n-1趟。因?yàn)樵趯?shí)際排序過程中,如果某趟結(jié)束后,數(shù)據(jù)已經(jīng)處于有序的狀態(tài),后續(xù)的各趟就沒有必要進(jìn)行下去。所以可以在算法中設(shè)置一個flag標(biāo)記,如果在排序過程中相鄰數(shù)據(jù)進(jìn)行了交換,就修改flag的值,否則flag保持不變。最后可根據(jù)flag值變化與否來判斷是否要進(jìn)入下一趟循環(huán)。 引導(dǎo)學(xué)生寫出改進(jìn)后的C代碼。 for(i=1;i { flag=0; for(j=0;j if(a[j]>a[j+1]) /*兩兩比較*/ {temp=a[j]; a[j]=a[j+1];a[j+1]=temp; flag=1;} /*順序不對交換位置*/ if(flag==0) break; } 改進(jìn)后的冒泡排序執(zhí)行效率明顯提高,在數(shù)據(jù)序列基本有序的情況下,執(zhí)行的趟數(shù)明顯減少,大大提高了執(zhí)行速度。 2結(jié)束語 本文以冒泡排序?yàn)槔C合運(yùn)用情景教學(xué),flash動畫演示,并結(jié)合冒泡排序的口訣教學(xué)等多種教學(xué)手段,生動形象地向?qū)W生講授了冒泡排序的原理及代碼實(shí)現(xiàn)。很好的體現(xiàn)了以學(xué)生為本,提高學(xué)生綜合素質(zhì)的教育理念。 參考文獻(xiàn) [1] 譚浩強(qiáng).C語言程序設(shè)計(第三版)[M].北京:清華大學(xué)出版社,2005:8. [2] 趙轉(zhuǎn)莉,郭紅山.C語言中冒泡排序教學(xué)方法芻議[J].辦公自動化(綜合版), 2007(05). [3] 楊朝霞.談計算機(jī)課程教學(xué)中詩化口訣的應(yīng)用[J].甘肅科技,2005,21(04). [4] 周李涵,高鷺.雙向思維的教學(xué)方法在冒泡排序及其改進(jìn)算法中的教學(xué)設(shè)計[J].科技信息,2009(24).