丁爽
【摘 要】C語言程序設(shè)計代碼的學(xué)習(xí)復(fù)雜、枯燥,冒泡排序算法又是C語言程序設(shè)計的重點與難點內(nèi)容之一?;贔lash的C語言冒泡排序課件,用Flash技術(shù)實現(xiàn)冒泡排序的動態(tài)演示過程,并逐步推導(dǎo)出冒泡算法的實現(xiàn)代碼。算法的動態(tài)演示及代碼的推導(dǎo)形象、直觀、易懂,能夠引導(dǎo)學(xué)生主動思考,便于學(xué)生理解,激發(fā)學(xué)生的學(xué)習(xí)興趣。課件中的拓展知識模塊能夠培訓(xùn)學(xué)生的自學(xué)能力,培訓(xùn)學(xué)生發(fā)現(xiàn)問題、解決問題的能力。
【關(guān)鍵詞】冒泡排序算法;Flash;C語言
C語言程序設(shè)計是高職院校工科學(xué)生的必修課。在程序設(shè)計中排序算法占據(jù)非常重要的地位,使用頻率非常高,而冒泡排序是排序算法中最基本的算法。在程序設(shè)計教學(xué)中,冒泡的思想學(xué)生雖然容易理解,但掌握的不夠扎實,自己動手編程的時候不知所措。經(jīng)調(diào)查分析,學(xué)生在學(xué)習(xí)冒泡排序的過程中,不能親自體驗到數(shù)據(jù)“冒泡”的過程,對冒泡排序沒有全面透徹的認(rèn)識,對所學(xué)代碼感到枯燥乏味。本文通過設(shè)計可視化的冒泡排序過程,動態(tài)地體現(xiàn)數(shù)據(jù)“冒泡”的過程,程序運行的每一步都清晰直觀的體現(xiàn)出來,一目了然。在理解算法的基礎(chǔ)上,冒泡算法的代碼由易到難一步步推導(dǎo)出來,學(xué)生能夠真正理解冒泡算法的程序代碼,對整個過程印象深刻。冒泡算法的Flash動畫,能夠吸引學(xué)生的學(xué)習(xí)興趣,會在教學(xué)中取得良好的效果。
1 冒泡排序算法簡述
排序,是將數(shù)據(jù)元素的任意順序排列為一個按關(guān)鍵字有序的序列。
冒泡排序算法是交換排序類的一種,它的基本思想是:在待排序的序列中,依次將相鄰的兩個數(shù)進(jìn)行比較,順序錯誤則進(jìn)行位置交換。
假設(shè)對待排序的序列進(jìn)行升序排序,將待排序序列中的每一個元素看成一個“氣泡”,并且縱向排列,在排序的過程中,大數(shù)“沉底”,小數(shù)逐漸“浮起”,就像水底的氣泡一樣逐漸向上冒,所以形象地稱為冒泡排序。
2 C語言冒泡排序課件的設(shè)計
本課件設(shè)計了排序的概念、基本思想、算法分析、名字由來、知識拓展五個獨立的模塊。
2.1 排序的概念模塊
排序的概念模塊主要介紹了排序的概念及其確切定義。
2.2 基本思想模塊
基本思想模塊主要介紹了冒泡排序的基本思想,通過冒泡排序的基本思想可以了解冒泡排序的基本過程。
2.3 算法分析模塊
算法分析模塊中以5、9、3、7、1五個數(shù)組成的待排序序列進(jìn)行升序排列為例,分析冒泡排序的過程,并逐步推導(dǎo)出冒泡算法的代碼。
首先進(jìn)行算法分析,每一輪比較確定一個較大數(shù),五個數(shù)需要經(jīng)過四輪的比較最終達(dá)到序列有序,在每一輪比較中,依次比較相鄰元素。第一輪比較中,依次對相鄰元素進(jìn)行比較,如果前面的元素大于后面的元素則進(jìn)行交換,5個數(shù)經(jīng)過4次比較,確定最大數(shù)9。第二輪比較中,對剩下的4個元素進(jìn)行比較,確定第二大數(shù)7。依次類推,第三輪比較確定第三大數(shù)5,第四輪比較確定第四大數(shù)3,至此,序列有序。
然后,根據(jù)每輪的比較過程,分別寫出四輪比較相對應(yīng)的C語言程序代碼,不難發(fā)現(xiàn)每輪的比較都可以用一個for循環(huán)解決,但循環(huán)條件不同,引導(dǎo)學(xué)生找到規(guī)律,再用一個for循環(huán)來解決。
算法分析模塊中,對冒泡排序過程進(jìn)行逐步演示并對程序代碼進(jìn)行一步步的推導(dǎo),使整個排序過程動態(tài)的呈現(xiàn)出來,對程序代碼的分析清晰易懂。在程序代碼的推導(dǎo)過程中由易到難,引導(dǎo)學(xué)生獨立思考,逐步實現(xiàn)冒泡排序算法。
2.4 名字由來模塊
名字由來模塊通過介紹冒泡排序名字的由來,強調(diào)冒泡排序 “兩兩比較,大數(shù)下沉,小數(shù)上浮”的特點,并通過一個完整的動畫演示了大數(shù)“沉底”,小數(shù)逐漸“浮起”,就像水底的氣泡一樣逐漸向上冒這一過程。這一模塊的設(shè)計主要是加深對冒泡排序算法基本思想的理解,有一個形象的記憶,只有真正理解了算法的基本思想,才能更好的掌握程序代碼,而不是靠死記硬背程序代碼。
2.5 知識拓展模塊
知識拓展模塊分為改進(jìn)的冒泡算法和其他排序算法兩部分。
改進(jìn)的冒泡算法部分主要是提出問題,改進(jìn)冒泡算法。在這一過程中,引導(dǎo)學(xué)生思考,培養(yǎng)學(xué)生發(fā)現(xiàn)問題解決、問題的能力。如果待排序的序列為9、1、3、5、7五個數(shù),經(jīng)過第一輪的排序該序列已經(jīng)有序,第二輪的比較沒有元素交換位置,不需要再進(jìn)行后面兩輪的比較,從而提高冒泡算法的效率。不難發(fā)現(xiàn),沒有交換就是提前退出外層循環(huán)的條件,增加一個標(biāo)志變量flag,在每輪比較前,首先將flag的值設(shè)置為0(表示沒有交換),每當(dāng)元素位置發(fā)生變化時,將flag的值重新設(shè)置為1(表示有交換),在每輪比較結(jié)束后來判斷本輪是否有元素交換位置,如果沒有,提前退出外層循環(huán)。
其他排序算法部分介紹了比較排序算法和選擇排序算法的基本思想,而且進(jìn)行了分步演示及程序代碼推導(dǎo)。比較排序算法和選擇排序算法也是常用的排序算法,通過不同排序方法的介紹,讓學(xué)生在掌握各種排序的特點后,能夠靈活運用。
知識拓展模塊提供更多的知識內(nèi)容,給學(xué)生學(xué)習(xí)的空間,發(fā)現(xiàn)問題,解決問題,讓學(xué)生獨立思考,培養(yǎng)學(xué)生的自學(xué)能力。
3 C語言冒泡排序課件的實現(xiàn)
排序的概念、基本思想、算法分析、名字由來、知識拓展五個模塊分別設(shè)計五個影片剪輯來完成相應(yīng)的模塊內(nèi)容。在主場景中添加排序的概念、基本思想、算法分析、名字由來、知識拓展五個按鈕,并對五個按鈕添加動作,使其跳轉(zhuǎn)到相應(yīng)的幀來播放相應(yīng)的影片剪輯。
排序的概念和基本思想兩個模塊的影片剪輯使用Flash的遮罩動畫制作,逐步顯示相關(guān)的知識點內(nèi)容。
算法分析、名字由來和知識拓展模塊中分別使用了上一步和下一步按鈕來控制播放的進(jìn)度。
算法分析模塊中用有數(shù)字的、有顏色的立體球呈現(xiàn)序列中的元素,在算法分析中每一步比較的兩個元素都高亮顯示,并用箭頭記錄每一次比較的對象,每一輪確定的最大數(shù)紅色顯示。所以算法的排序過程清晰直觀,過程可控,易于學(xué)習(xí)。
4 結(jié)束語
基于flash的冒泡排序課件,動態(tài)演示了冒泡算法,并逐步推導(dǎo)出程序代碼,既有利于教師的課堂教學(xué),也利于學(xué)生的課后復(fù)習(xí),學(xué)生可以邊看動態(tài)演示,邊用C語言程序?qū)崿F(xiàn)算法,可以說是講解和實踐的完美結(jié)合。課件中的動畫將枯燥的程序代碼采取了可視化的方法進(jìn)行講解,調(diào)動學(xué)生學(xué)習(xí)的積極性,激發(fā)學(xué)生的學(xué)習(xí)熱情,讓學(xué)生主動思考,主動參與到知識的形成過程中,很好的解決了教學(xué)難點,為后續(xù)一系列的學(xué)習(xí)打下良好的基礎(chǔ)。
【參考文獻(xiàn)】
[1]衛(wèi)華,高金芹,王維東.Flash MX應(yīng)用基礎(chǔ)[M].長沙:國防科技大學(xué)出版社,2003.
[2]譚浩強.C程序設(shè)計(第三版)[M].北京:清華大學(xué)出版社,2009.
[3]嚴(yán)蔚敏,吳偉民.數(shù)據(jù)結(jié)構(gòu)(C語言版)[M].北京:清華大學(xué)出版社,1997.
[4]劉暢.冒泡排序法例程Flash制作[J].牡丹江師范學(xué)院學(xué)報,2008(2):30-31.
[5]蘇仰娜.C語言程序交互式虛擬算法動畫的開發(fā)與教學(xué)應(yīng)用[J].電化教育研究,2010(4):72-74.
[6]楊波,梁少林.C語言中冒泡排序算法的教學(xué)設(shè)計與分析[J].信息與電腦,2015(16):180-181.
[責(zé)任編輯:朱麗娜]