公務(wù)員期刊網(wǎng) 論文中心 正文

C語言中冒泡排序算法教學設(shè)計

前言:想要寫出一篇引人入勝的文章?我們特意為您整理了C語言中冒泡排序算法教學設(shè)計范文,希望能給你帶來靈感和參考,敬請閱讀。

C語言中冒泡排序算法教學設(shè)計

排序是計算機科學中一項重要的技術(shù),其應(yīng)用范圍廣、使用頻率高,因此對于排序算法的研究一直是計算機專家的重點。高校的程序設(shè)計類課程也將排序算法作為重難點進行教學。

1常見的幾種排序算法

1.1算法的基本概念

算法(Algorithm)是指解題方案的準確而完整的描述,是一組解決問題的指令集合,按照一定的語法規(guī)則輸入,在有限時間內(nèi)獲得所要求的輸出。簡單說就是計算機的解題過程。算法具備以下幾個特征:有窮性,一個算法的執(zhí)行次數(shù)必須是有限的;確切性,算法的中的語句都應(yīng)該具有確切的語義;輸入,算法可以有0個或多個輸入,給運算對象賦初值;輸出,算法應(yīng)該有一個或多個輸出,顯示算法的運行結(jié)果;可行性,算法的設(shè)計在原則上是可行的。

1.2排序算法的簡述

常見的幾種排序算法有:冒泡排序、選擇排序、快速排序、計數(shù)排序以及托普排序等。冒泡排序(BubbleSort),是最簡單的排序方法,其基本思想是:將要排序的元素看成是一組豎排的“氣泡”,較小的元素較輕,往上浮,通過若干次對這個“氣泡”序列的處理,讓最輕的浮到最上面,次輕的次之,依次完成排序。按照一般的教學方法,老師會先向?qū)W生講解冒泡排序的基本思想和相應(yīng)代碼然后再執(zhí)行。這種方式學生理解和掌握起來比較困難,也無法調(diào)動學生的學習積極性,更無法使學生靈活運用。因此,要設(shè)計出一個合理、高效的教學過程,調(diào)動學生的學習積極性,拓展學生的自主思維能力,使學生掌握冒泡排序算法的思想及其編程方法,并運用到解決實際問題當中。

2教學過程設(shè)計

2.1利用多媒體動態(tài)分解排序步驟

通過多媒體軟件將排序過程設(shè)計為動態(tài)效果,演示數(shù)據(jù)序列的交換過程。相鄰數(shù)據(jù)進行比較,大數(shù)下沉、小數(shù)上浮。這樣能直觀地展現(xiàn)冒泡序的過程,提高學生的學習興趣。

2.2排序過程動態(tài)解析

下面通過實例來說明冒泡排序的過程,設(shè)計排序的數(shù)據(jù)序列為:5,7,3,0,6五個數(shù),進行升序排列,其過程分析如下。第一趟排序:先讓最上面相鄰兩個數(shù)字進行比較,如果上面的數(shù)大于后面的數(shù),就交換兩者的位置,再將交換后的數(shù)依次與后面的數(shù)進行比較,經(jīng)過4次這樣的比較,就可以讓最大的數(shù)“沉底”。第二趟排序:對剩下的4個數(shù)字,再進行兩兩比較,同前面過程一樣,經(jīng)過3次比較,第二大的數(shù)就排到了倒數(shù)第二個位置。第三趟排序:對剩下的3個數(shù),再進行兩兩比較,同前面過程一樣,經(jīng)過2次比較,第三大的數(shù)排到了倒數(shù)第三個位置。第四趟排序:對剩下的2個數(shù)進行兩兩比較,過程同上,經(jīng)過1次比較,第四大的數(shù)排到了倒數(shù)第四個位置。從而完成的本次排序。

2.3給出代碼與分析

根據(jù)前面對排序過程的分析可知,如有n個數(shù)要進行排序,則可總結(jié)出以下步驟:排序的趟數(shù)為n-1;相鄰兩數(shù)從前往后比;每趟比較n-1-i次;大小不對就交換。按照總結(jié)的步驟給出完成相應(yīng)功能的代碼,學生接受和理解起來更加容易。其主要代碼如下: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}通過教學實踐證明,冒泡排序的思想容易理解,學生在將其轉(zhuǎn)換為程序言時較難,通過將排序過程作以上步驟總結(jié)后,學生在寫程序時只需安排步驟進行代碼編寫,簡單易行。再讓學生自己舉例,分析程序的執(zhí)行過程,驗證冒泡排序的思想和代碼的正確性。

2.4引導(dǎo)學生發(fā)現(xiàn)問題,改進算法

在教學中讓學生跟著老師的思路理解并掌握知識點很重要,但同時引導(dǎo)學生發(fā)現(xiàn)算法設(shè)計中存在的問題或者不完善的地方,由此探索解決辦法,也是教學的一個重要目的。觀察分析排序過程的表1可發(fā)現(xiàn),最后兩趟的數(shù)據(jù)順序是一致的,也就是說倒數(shù)第二趟排序就已經(jīng)排序完成了,最后一趟排序過程是多余的。由此可見,不管初始數(shù)據(jù)序列如何,根據(jù)上面的算法設(shè)計都要進行n-1趟排序,而在實際序列中,可能在少于n-1趟的排序中就已經(jīng)變成了有序序列,完成了排序,后面的循環(huán)就沒有必要了。這時老師可給出一個常規(guī)的改進算法:設(shè)置一個標志變量flag,如flag=1,表示有交換;flag=0,表示無交換。即是當flag=0時就結(jié)束循環(huán),提高排序效率。具體做法是:在上述程序第1行下插入語句“flag=0;”,第6行下插入語句“flag=1;”,第7行下插入語句“if(flag==0)break;”。這樣在程序的內(nèi)層循環(huán)中不再有值的變化時就可以跳出循環(huán),結(jié)束程序,從而提高算法的效率?,F(xiàn)代教育著重對學生創(chuàng)造性思維的培養(yǎng),相對于知識的講授更重要的是讓學生掌握思維方式,發(fā)散思維就是創(chuàng)造性思維中的一種重要形式。通過上面的講解讓學生知道冒泡算法還有其不完善的地方,可進一步啟發(fā)學生對算法進行改進:如上浮下沉算法、快速排序算法、線性時間算法等。使學生能更快更好掌握排序算法的基本思想和原理,著重培養(yǎng)學生發(fā)現(xiàn)問題和解決問題的能力,激發(fā)學生的獨立思考和創(chuàng)新能力,這比將固化的知識點傳授給學生更加的重要和有效。

3結(jié)語

本文以講授冒泡排序為例,設(shè)計了通過動態(tài)的PPT和增加動畫效果等多媒體教學手段,采用正向講解算法思想,逆向分析具體實例,歸納、總結(jié)算法的多種思維方法,形象生動的向?qū)W生展示了冒泡排序的基本思想和變化過程。一方面通過步驟的總結(jié)過度到代碼的書寫,突破代碼書寫的難點。另一方面引導(dǎo)學生觀察算法的不足之處,讓學生自己發(fā)現(xiàn)問題,并提出解決問題的辦法,進而培養(yǎng)學生的發(fā)散思維和獨立思考的能力,體現(xiàn)了現(xiàn)代教育著重培養(yǎng)學生創(chuàng)新能力的教育思想。

作者:楊波 梁少林 單位:四川文理學院數(shù)學與財經(jīng)學院