前言:想要寫出一篇引人入勝的文章?我們特意為您整理了C語言中冒泡排序算法教學(xué)設(shè)計(jì)范文,希望能給你帶來靈感和參考,敬請閱讀。
排序是計(jì)算機(jī)科學(xué)中一項(xiàng)重要的技術(shù),其應(yīng)用范圍廣、使用頻率高,因此對于排序算法的研究一直是計(jì)算機(jī)專家的重點(diǎn)。高校的程序設(shè)計(jì)類課程也將排序算法作為重難點(diǎn)進(jìn)行教學(xué)。
1常見的幾種排序算法
1.1算法的基本概念
算法(Algorithm)是指解題方案的準(zhǔn)確而完整的描述,是一組解決問題的指令集合,按照一定的語法規(guī)則輸入,在有限時(shí)間內(nèi)獲得所要求的輸出。簡單說就是計(jì)算機(jī)的解題過程。算法具備以下幾個(gè)特征:有窮性,一個(gè)算法的執(zhí)行次數(shù)必須是有限的;確切性,算法的中的語句都應(yīng)該具有確切的語義;輸入,算法可以有0個(gè)或多個(gè)輸入,給運(yùn)算對象賦初值;輸出,算法應(yīng)該有一個(gè)或多個(gè)輸出,顯示算法的運(yùn)行結(jié)果;可行性,算法的設(shè)計(jì)在原則上是可行的。
1.2排序算法的簡述
常見的幾種排序算法有:冒泡排序、選擇排序、快速排序、計(jì)數(shù)排序以及托普排序等。冒泡排序(BubbleSort),是最簡單的排序方法,其基本思想是:將要排序的元素看成是一組豎排的“氣泡”,較小的元素較輕,往上浮,通過若干次對這個(gè)“氣泡”序列的處理,讓最輕的浮到最上面,次輕的次之,依次完成排序。按照一般的教學(xué)方法,老師會先向?qū)W生講解冒泡排序的基本思想和相應(yīng)代碼然后再執(zhí)行。這種方式學(xué)生理解和掌握起來比較困難,也無法調(diào)動學(xué)生的學(xué)習(xí)積極性,更無法使學(xué)生靈活運(yùn)用。因此,要設(shè)計(jì)出一個(gè)合理、高效的教學(xué)過程,調(diào)動學(xué)生的學(xué)習(xí)積極性,拓展學(xué)生的自主思維能力,使學(xué)生掌握冒泡排序算法的思想及其編程方法,并運(yùn)用到解決實(shí)際問題當(dāng)中。
2教學(xué)過程設(shè)計(jì)
2.1利用多媒體動態(tài)分解排序步驟
通過多媒體軟件將排序過程設(shè)計(jì)為動態(tài)效果,演示數(shù)據(jù)序列的交換過程。相鄰數(shù)據(jù)進(jìn)行比較,大數(shù)下沉、小數(shù)上浮。這樣能直觀地展現(xiàn)冒泡序的過程,提高學(xué)生的學(xué)習(xí)興趣。
2.2排序過程動態(tài)解析
下面通過實(shí)例來說明冒泡排序的過程,設(shè)計(jì)排序的數(shù)據(jù)序列為:5,7,3,0,6五個(gè)數(shù),進(jìn)行升序排列,其過程分析如下。第一趟排序:先讓最上面相鄰兩個(gè)數(shù)字進(jìn)行比較,如果上面的數(shù)大于后面的數(shù),就交換兩者的位置,再將交換后的數(shù)依次與后面的數(shù)進(jìn)行比較,經(jīng)過4次這樣的比較,就可以讓最大的數(shù)“沉底”。第二趟排序:對剩下的4個(gè)數(shù)字,再進(jìn)行兩兩比較,同前面過程一樣,經(jīng)過3次比較,第二大的數(shù)就排到了倒數(shù)第二個(gè)位置。第三趟排序:對剩下的3個(gè)數(shù),再進(jìn)行兩兩比較,同前面過程一樣,經(jīng)過2次比較,第三大的數(shù)排到了倒數(shù)第三個(gè)位置。第四趟排序:對剩下的2個(gè)數(shù)進(jìn)行兩兩比較,過程同上,經(jīng)過1次比較,第四大的數(shù)排到了倒數(shù)第四個(gè)位置。從而完成的本次排序。
2.3給出代碼與分析
根據(jù)前面對排序過程的分析可知,如有n個(gè)數(shù)要進(jìn)行排序,則可總結(jié)出以下步驟:排序的趟數(shù)為n-1;相鄰兩數(shù)從前往后比;每趟比較n-1-i次;大小不對就交換。按照總結(jié)的步驟給出完成相應(yīng)功能的代碼,學(xué)生接受和理解起來更加容易。其主要代碼如下:1For(i=0;i<n;i++)/*排序的趟數(shù)為n-1*/2{For(j=0;j<n-1-i;j++)/*相鄰兩數(shù)從前往后比,每趟比較n-1-i次*/3If(a[j]>a[j+1])/*大小不對就交換*/4{temp=a[j];5a[j]>a[j+1];6a[j+1]=temp;7}8}通過教學(xué)實(shí)踐證明,冒泡排序的思想容易理解,學(xué)生在將其轉(zhuǎn)換為程序言時(shí)較難,通過將排序過程作以上步驟總結(jié)后,學(xué)生在寫程序時(shí)只需安排步驟進(jìn)行代碼編寫,簡單易行。再讓學(xué)生自己舉例,分析程序的執(zhí)行過程,驗(yàn)證冒泡排序的思想和代碼的正確性。
2.4引導(dǎo)學(xué)生發(fā)現(xiàn)問題,改進(jìn)算法
在教學(xué)中讓學(xué)生跟著老師的思路理解并掌握知識點(diǎn)很重要,但同時(shí)引導(dǎo)學(xué)生發(fā)現(xiàn)算法設(shè)計(jì)中存在的問題或者不完善的地方,由此探索解決辦法,也是教學(xué)的一個(gè)重要目的。觀察分析排序過程的表1可發(fā)現(xiàn),最后兩趟的數(shù)據(jù)順序是一致的,也就是說倒數(shù)第二趟排序就已經(jīng)排序完成了,最后一趟排序過程是多余的。由此可見,不管初始數(shù)據(jù)序列如何,根據(jù)上面的算法設(shè)計(jì)都要進(jìn)行n-1趟排序,而在實(shí)際序列中,可能在少于n-1趟的排序中就已經(jīng)變成了有序序列,完成了排序,后面的循環(huán)就沒有必要了。這時(shí)老師可給出一個(gè)常規(guī)的改進(jìn)算法:設(shè)置一個(gè)標(biāo)志變量flag,如flag=1,表示有交換;flag=0,表示無交換。即是當(dāng)flag=0時(shí)就結(jié)束循環(huán),提高排序效率。具體做法是:在上述程序第1行下插入語句“flag=0;”,第6行下插入語句“flag=1;”,第7行下插入語句“if(flag==0)break;”。這樣在程序的內(nèi)層循環(huán)中不再有值的變化時(shí)就可以跳出循環(huán),結(jié)束程序,從而提高算法的效率?,F(xiàn)代教育著重對學(xué)生創(chuàng)造性思維的培養(yǎng),相對于知識的講授更重要的是讓學(xué)生掌握思維方式,發(fā)散思維就是創(chuàng)造性思維中的一種重要形式。通過上面的講解讓學(xué)生知道冒泡算法還有其不完善的地方,可進(jìn)一步啟發(fā)學(xué)生對算法進(jìn)行改進(jìn):如上浮下沉算法、快速排序算法、線性時(shí)間算法等。使學(xué)生能更快更好掌握排序算法的基本思想和原理,著重培養(yǎng)學(xué)生發(fā)現(xiàn)問題和解決問題的能力,激發(fā)學(xué)生的獨(dú)立思考和創(chuàng)新能力,這比將固化的知識點(diǎn)傳授給學(xué)生更加的重要和有效。
3結(jié)語
本文以講授冒泡排序?yàn)槔?,設(shè)計(jì)了通過動態(tài)的PPT和增加動畫效果等多媒體教學(xué)手段,采用正向講解算法思想,逆向分析具體實(shí)例,歸納、總結(jié)算法的多種思維方法,形象生動的向?qū)W生展示了冒泡排序的基本思想和變化過程。一方面通過步驟的總結(jié)過度到代碼的書寫,突破代碼書寫的難點(diǎn)。另一方面引導(dǎo)學(xué)生觀察算法的不足之處,讓學(xué)生自己發(fā)現(xiàn)問題,并提出解決問題的辦法,進(jìn)而培養(yǎng)學(xué)生的發(fā)散思維和獨(dú)立思考的能力,體現(xiàn)了現(xiàn)代教育著重培養(yǎng)學(xué)生創(chuàng)新能力的教育思想。
作者:楊波 梁少林 單位:四川文理學(xué)院數(shù)學(xué)與財(cái)經(jīng)學(xué)院