蔡昊君
(鄭州市第一中學(xué) 河南鄭州 450007)
冒泡排序動態(tài)演示算法設(shè)計
蔡昊君
(鄭州市第一中學(xué) 河南鄭州 450007)
在傳統(tǒng)的教學(xué)方法中,針對冒泡算法的教學(xué)主要是通過PPT、圖解或者flash動畫進行講述的,但是在教學(xué)過程中,仍然難以取得一個良好的教學(xué)效果,針對這種情況,重新對冒泡算法進行了研究,并運用C#語言設(shè)計了一套冒泡排序動態(tài)演示程序,可以讓學(xué)生更加直觀的了解該算法的動態(tài)執(zhí)行過程,并直接進行動態(tài)演示,進而能夠輕松的掌握冒泡排序算法的本質(zhì)內(nèi)容。
冒泡排序;程序;動態(tài)演示
作為計算機數(shù)據(jù)處理過程中經(jīng)常會用的到的算法之一,冒泡排序無疑是十分經(jīng)典的,在整個程序設(shè)計教學(xué)中都具有十分重要的意義。事實上,冒泡算法的基本思路是十分容易理解的,但是具體到實際的程序設(shè)計過程中取往往難以找到著手點,所以為了更加清晰、直白的將整個算法展現(xiàn)在學(xué)生面前,本人設(shè)計了一個冒泡排序的動態(tài)演示算法,能夠讓學(xué)生更加清晰的了解冒泡算法在執(zhí)行過程中,程序的執(zhí)行與所產(chǎn)生的變化。
冒泡排序是一種最基本的排序方法,因其簡單實用而被廣泛應(yīng)用在實際編程中,所以在進行基礎(chǔ)編程教學(xué)中尤為重要。冒泡排序的具體過程是:假設(shè)要對數(shù)組A[1..n]中的元素進行非降序排序,則首先比較元素A[1]和A[2],若為逆序則將二者交換,然后比較元素A[2]和A[3],若為逆序則將二者交換,依次類推,直到比較最后兩個元素A[n-1]和A[n],稱為一趟“冒泡”,其結(jié)果是將數(shù)組中值最大的元素放到了整個序列的最后,而數(shù)組中值較小的元素都上升一個位置。然后再對剩余的A[1]到A[n-1]的元素進行第二趟“冒泡”,將具有次大值的元素放到A[n-1]的位置上。直到第n-1趟排序,在A[1]和A[2]之間進行“冒泡”后,排序完成。
冒泡排序是以交換為基礎(chǔ)的排序算法,若在某一趟排序中未發(fā)現(xiàn)元素進行交換,則說明所有元素都已有序,冒泡排序過程可在該趟排序后終止。因此,可設(shè)一個標志exchange,在每趟排序開始前,先將其置為false,若排序過程中發(fā)生了交換,則將其置為true,每趟排序結(jié)束時檢查exchange,若未曾發(fā)生過交換則終止算法,不再進行下一趟排序。用C#實現(xiàn)的冒泡排序程序如下:
窗體上共安排Panel控件的數(shù)量為三,其中一個是演示窗口,在程序運行過程中實時顯示代表排序數(shù)據(jù)的標簽控件,隨著排序的進行,標簽控件的顏色發(fā)生變化;命令按鈕全部放置在右邊的Panel控件上;最后一個Panel控件的作用是放置顯示每趟排序結(jié)果的容器。圖1為程序運行界面。
圖1 程序運行界面
本冒泡排序動態(tài)演示設(shè)計系統(tǒng)的演示由窗口上簽的顏色變換來達到演示效果,在整個程序中一共使用了三個定時器,一個定時器控件起延時的作用,另外兩個定時器控件分別控制外層循環(huán)和內(nèi)層循環(huán)的實現(xiàn)。以下為部分程序代碼:
//以下為類中定義的變量private constint MAXNUMBERS=40;//可以設(shè)置的最大數(shù)組容量,最小容量為private int[]numbers=new int[1];//排序用的數(shù)組
本設(shè)計能是學(xué)生清晰的看見程序的語句執(zhí)行情況和存儲單元變化的情況,有利于學(xué)生快速的掌握冒泡排序算法,而且使用這種動態(tài)演示方式進行學(xué)習(xí)不受時間、地點的約束,學(xué)生甚至可以自己在課下自己模擬該過程,這樣更有利于學(xué)生的自主學(xué)習(xí),也可以充分的激發(fā)學(xué)生的自主學(xué)習(xí)能力和對于程序的激情,達到更好的教學(xué)效果。
[1]楊波,梁少林.C語言中冒泡排序算法的教學(xué)設(shè)計與分析[J].信息與電腦(理論版),2015(16).
[2]謝翠萍,陳家益,朱兵章.C語言中冒泡排序教學(xué)設(shè)計與分析[J].福建電腦,2013(05).
[3]郭亞慶,趙源.冒泡法排序的動態(tài)演示[J].湖北工業(yè)職業(yè)技術(shù)學(xué)院學(xué)報,2014(01).
[4]邵平.冒泡排序程序設(shè)計的探究式教學(xué)方法及其分析[J].玉林師范學(xué)院學(xué)報,2008(05).
[5]宋美英.基于C語言的冒泡排序算法探討[J].現(xiàn)代計算機(專業(yè)版),2011(29).
[6]FaltinN.Structure and Constraints inInteractive Exploratory Algorithm Learning,2002.
[7]CapposJ,Homer P.Ds Cats:Animating Data Structures for CS 2 and CS 3 Courses,http://www.cs.arizona.edu/dscats/dscatstechnical.pdf.2002.
[8]CHRISTOPHER D.HUNDHAUSEN,SARAH A.DOUGLAS,JOHN T.STASKO.A Meta-Study of Algorithm Visualization Effectiveness[J].Journal of Visual Languages and Computing,2002(3).
TP311.1
A
1004-7344(2016)32-0285-02
2016-10-29