蔡昊君
(鄭州市第一中學(xué) 河南鄭州 450007)
冒泡排序動(dòng)態(tài)演示算法設(shè)計(jì)
蔡昊君
(鄭州市第一中學(xué) 河南鄭州 450007)
在傳統(tǒng)的教學(xué)方法中,針對冒泡算法的教學(xué)主要是通過PPT、圖解或者flash動(dòng)畫進(jìn)行講述的,但是在教學(xué)過程中,仍然難以取得一個(gè)良好的教學(xué)效果,針對這種情況,重新對冒泡算法進(jìn)行了研究,并運(yùn)用C#語言設(shè)計(jì)了一套冒泡排序動(dòng)態(tài)演示程序,可以讓學(xué)生更加直觀的了解該算法的動(dòng)態(tài)執(zhí)行過程,并直接進(jìn)行動(dòng)態(tài)演示,進(jìn)而能夠輕松的掌握冒泡排序算法的本質(zhì)內(nèi)容。
冒泡排序;程序;動(dòng)態(tài)演示
作為計(jì)算機(jī)數(shù)據(jù)處理過程中經(jīng)常會(huì)用的到的算法之一,冒泡排序無疑是十分經(jīng)典的,在整個(gè)程序設(shè)計(jì)教學(xué)中都具有十分重要的意義。事實(shí)上,冒泡算法的基本思路是十分容易理解的,但是具體到實(shí)際的程序設(shè)計(jì)過程中取往往難以找到著手點(diǎn),所以為了更加清晰、直白的將整個(gè)算法展現(xiàn)在學(xué)生面前,本人設(shè)計(jì)了一個(gè)冒泡排序的動(dòng)態(tài)演示算法,能夠讓學(xué)生更加清晰的了解冒泡算法在執(zhí)行過程中,程序的執(zhí)行與所產(chǎn)生的變化。
冒泡排序是一種最基本的排序方法,因其簡單實(shí)用而被廣泛應(yīng)用在實(shí)際編程中,所以在進(jìn)行基礎(chǔ)編程教學(xué)中尤為重要。冒泡排序的具體過程是:假設(shè)要對數(shù)組A[1..n]中的元素進(jìn)行非降序排序,則首先比較元素A[1]和A[2],若為逆序則將二者交換,然后比較元素A[2]和A[3],若為逆序則將二者交換,依次類推,直到比較最后兩個(gè)元素A[n-1]和A[n],稱為一趟“冒泡”,其結(jié)果是將數(shù)組中值最大的元素放到了整個(gè)序列的最后,而數(shù)組中值較小的元素都上升一個(gè)位置。然后再對剩余的A[1]到A[n-1]的元素進(jìn)行第二趟“冒泡”,將具有次大值的元素放到A[n-1]的位置上。直到第n-1趟排序,在A[1]和A[2]之間進(jìn)行“冒泡”后,排序完成。
冒泡排序是以交換為基礎(chǔ)的排序算法,若在某一趟排序中未發(fā)現(xiàn)元素進(jìn)行交換,則說明所有元素都已有序,冒泡排序過程可在該趟排序后終止。因此,可設(shè)一個(gè)標(biāo)志exchange,在每趟排序開始前,先將其置為false,若排序過程中發(fā)生了交換,則將其置為true,每趟排序結(jié)束時(shí)檢查exchange,若未曾發(fā)生過交換則終止算法,不再進(jìn)行下一趟排序。用C#實(shí)現(xiàn)的冒泡排序程序如下:


窗體上共安排Panel控件的數(shù)量為三,其中一個(gè)是演示窗口,在程序運(yùn)行過程中實(shí)時(shí)顯示代表排序數(shù)據(jù)的標(biāo)簽控件,隨著排序的進(jìn)行,標(biāo)簽控件的顏色發(fā)生變化;命令按鈕全部放置在右邊的Panel控件上;最后一個(gè)Panel控件的作用是放置顯示每趟排序結(jié)果的容器。圖1為程序運(yùn)行界面。

圖1 程序運(yùn)行界面
本冒泡排序動(dòng)態(tài)演示設(shè)計(jì)系統(tǒng)的演示由窗口上簽的顏色變換來達(dá)到演示效果,在整個(gè)程序中一共使用了三個(gè)定時(shí)器,一個(gè)定時(shí)器控件起延時(shí)的作用,另外兩個(gè)定時(shí)器控件分別控制外層循環(huán)和內(nèi)層循環(huán)的實(shí)現(xiàn)。以下為部分程序代碼:
//以下為類中定義的變量private constint MAXNUMBERS=40;//可以設(shè)置的最大數(shù)組容量,最小容量為private int[]numbers=new int[1];//排序用的數(shù)組


本設(shè)計(jì)能是學(xué)生清晰的看見程序的語句執(zhí)行情況和存儲(chǔ)單元變化的情況,有利于學(xué)生快速的掌握冒泡排序算法,而且使用這種動(dòng)態(tài)演示方式進(jìn)行學(xué)習(xí)不受時(shí)間、地點(diǎn)的約束,學(xué)生甚至可以自己在課下自己模擬該過程,這樣更有利于學(xué)生的自主學(xué)習(xí),也可以充分的激發(fā)學(xué)生的自主學(xué)習(xí)能力和對于程序的激情,達(dá)到更好的教學(xué)效果。
[1]楊波,梁少林.C語言中冒泡排序算法的教學(xué)設(shè)計(jì)與分析[J].信息與電腦(理論版),2015(16).
[2]謝翠萍,陳家益,朱兵章.C語言中冒泡排序教學(xué)設(shè)計(jì)與分析[J].福建電腦,2013(05).
[3]郭亞慶,趙源.冒泡法排序的動(dòng)態(tài)演示[J].湖北工業(yè)職業(yè)技術(shù)學(xué)院學(xué)報(bào),2014(01).
[4]邵平.冒泡排序程序設(shè)計(jì)的探究式教學(xué)方法及其分析[J].玉林師范學(xué)院學(xué)報(bào),2008(05).
[5]宋美英.基于C語言的冒泡排序算法探討[J].現(xiàn)代計(jì)算機(jī)(專業(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