郭亞慶 趙源
摘 要: 文章就冒泡法排序的動(dòng)態(tài)演示程序?qū)崿F(xiàn)的關(guān)鍵技術(shù)做了詳細(xì)的闡述,明確地提出了算法的動(dòng)態(tài)演示在計(jì)算機(jī)語(yǔ)言課教學(xué)中的重要作用。
關(guān)鍵詞: 冒泡法排序;數(shù)字移動(dòng);教學(xué)效果
中圖分類號(hào): TP311.1 [HT5H]文獻(xiàn)標(biāo)識(shí)碼: A 文章編號(hào): 10084738(2014)01010802
各種排序法是計(jì)算機(jī)語(yǔ)言課教學(xué)的難點(diǎn)與重點(diǎn)。按照傳統(tǒng)的教學(xué)模式,單純靠老師在黑板書寫與畫圖,既費(fèi)時(shí)又費(fèi)力,而且學(xué)生聽起來(lái)感到抽象,枯燥又難懂。以人機(jī)交互方式,進(jìn)行動(dòng)態(tài)演示,使抽象、枯燥的學(xué)習(xí)內(nèi)容轉(zhuǎn)化成形象、有趣、可視、可聽的動(dòng)感內(nèi)容,就能夠有效地激發(fā)學(xué)生的學(xué)習(xí)興趣,變苦學(xué)為樂學(xué),達(dá)到事半功倍的效果。下面我們以冒泡法排序?yàn)槔U述動(dòng)態(tài)演示程序的設(shè)計(jì)過程。
1 冒泡法排序的基本思想
冒泡法排序是最為常用的一種排序方法 ,它是一類具有“交換”性質(zhì)的排序方法,具體描述如下:
將序列中的第一個(gè)元素與第二個(gè)元素比較,若前者大于后者,則第一個(gè)元素與第二個(gè)元素進(jìn)行位置交換,否則不交換。
再將第二個(gè)元素與第三個(gè)元素比較,同樣若前者大于后者,則將第二元素與第三個(gè)元素進(jìn)行位置交換,否則不交換。
依次類推直到將第n-1個(gè)元素與第n個(gè)元素進(jìn)行比較為止,這個(gè)過程稱為第1趟冒泡法排序,經(jīng)過第1 趟冒泡法排序,將長(zhǎng)度為N的序列中最大的元素置于序列的尾部即第N個(gè)位置上,然后再對(duì)剩下的N-1個(gè)元素作同樣的操作,這叫作第2趟排序,將剩下的N-1個(gè)元素中最大的元素置于序列的N-1的位置上。
如此進(jìn)行下去,當(dāng)執(zhí)行完第N-1趟冒泡法排序后就可以將序列中剩下2個(gè)元素中的最大元素置于序列的第2個(gè)位置上,第1個(gè)位置上的元素就是該序列中的最小元素[1]。
2 動(dòng)態(tài)演示程序的設(shè)計(jì)
2.1 界面設(shè)計(jì)
界面最初狀態(tài)左半部分別為:初始化按鈕、排序按鈕、結(jié)束按鈕。右半部分為動(dòng)態(tài)演示區(qū),其中上部為六個(gè)標(biāo)簽框,第一個(gè)標(biāo)簽框LABEL3標(biāo)識(shí)為“排序前的數(shù)據(jù)”,其余的五個(gè)標(biāo)簽框是以LABEL2命名的標(biāo)簽框數(shù)組,用以動(dòng)態(tài)顯示第i趟排序中哪個(gè)元素與哪個(gè)元素比較,當(dāng)?shù)趇趟排序結(jié)束后,則顯示本趟排序的總共比較次數(shù)。中間部分初始為空,經(jīng)過初始化后,動(dòng)態(tài)產(chǎn)生了兩個(gè)文本框控件數(shù)組,并隨機(jī)產(chǎn)生待排序的數(shù)據(jù)。
第一個(gè)文本框控件數(shù)組為 TXT1(1To6) 用于存放排序前的數(shù)據(jù),為了模擬逼真,待排序的數(shù)據(jù)豎著存放,以便小的數(shù)據(jù)像氣泡一樣上浮,大的數(shù)據(jù)下沉。第二個(gè)文本框控件數(shù)組為txtNew(1To6, 1To6),存放時(shí)豎為行,橫為列,初始僅第一行可見,并存放待排序數(shù)據(jù)??丶?shù)組txtNew其余各行分別在第i趟排序中依次動(dòng)態(tài)顯示。界面右半部分的下部為五個(gè)標(biāo)簽框,用于動(dòng)態(tài)顯示第幾趟排序。初始化后的界面見圖1。
2.2 數(shù)字的移動(dòng)
數(shù)字的移動(dòng)與交換,是動(dòng)態(tài)演示程序?qū)崿F(xiàn)的關(guān)鍵,單純的數(shù)字是不能移動(dòng)的,為了能使數(shù)字移動(dòng),必須借助于一個(gè)載體, 在排序比較的過程中, 若發(fā)現(xiàn)前者大于后者,如何使小的數(shù)字上浮,大的數(shù)字下沉呢?這是動(dòng)態(tài)演示的關(guān)鍵。解決的辦法通常是交換數(shù)組元素中的數(shù)字,這在算法上是正確的,能得到正確的結(jié)果。但是數(shù)組元素中的數(shù)字交換是在內(nèi)存進(jìn)行的,是不可見的,達(dá)不到動(dòng)態(tài)演示的目的。如果將數(shù)組的元素(數(shù)組的元素為文本框)整體移動(dòng)互換位置,這時(shí)可以看到數(shù)字跟隨載體移動(dòng)的過程,雖然兩個(gè)元素交換了位置,但是數(shù)組元素的下標(biāo)并沒有改變,因而導(dǎo)致排序不能得到正確結(jié)果。如何既能保證排序結(jié)果的正確,又能看見小的數(shù)字上浮,大的數(shù)字下沉,在這里采取的辦法是:每當(dāng)發(fā)現(xiàn)兩個(gè)元素前者大于后者時(shí),立即調(diào)用兩個(gè)文本框即Text1和Text2作為載體,分別停靠在這兩個(gè)元素的旁邊,然后把需要交換的兩個(gè)數(shù)字分別賦給Text1和Text2(見圖2)。
下一步讓小的數(shù)字隨同文本框Text2上浮,大的數(shù)字隨同另一文本框Text1下沉,當(dāng)兩者達(dá)到要交換的位置時(shí),再把兩個(gè)數(shù)字傳送到相應(yīng)的位置,并使Text1和Text2變?yōu)椴豢梢?。這樣既保證了待排序數(shù)組下標(biāo)及位置不變,又能看見小的數(shù)字上浮,大的數(shù)字下沉及交換的全過程。
2.3 移動(dòng)速度及終點(diǎn)的控制
為了提高演示的效果,必須對(duì)數(shù)字移動(dòng)的速度進(jìn)行控制,并計(jì)算好到達(dá)的終點(diǎn)。由于待排數(shù)據(jù)是按一定規(guī)律分布的,相鄰兩個(gè)元素間的距離是一定的。每當(dāng)發(fā)現(xiàn)txtNew(I, J)和txtNew(I, J+1)兩個(gè)元素要交換時(shí),記錄下這兩個(gè)元素的頂部的坐標(biāo)值,(這個(gè)值亦是Text1和Text2要移動(dòng)的終點(diǎn)),然后利用循環(huán)逐步改變Text1和Text2的頂點(diǎn)坐標(biāo)值,每移動(dòng)一次調(diào)用API函數(shù)中的延時(shí)函數(shù)Sleep 50(延時(shí)50毫秒),直至終點(diǎn)。這樣我們就能清晰地看到小的數(shù)字上浮,大的數(shù)字下沉的過程[2]。
代碼執(zhí)行完后界面如圖3所示,這時(shí)動(dòng)態(tài)顯示區(qū)的下部五個(gè)標(biāo)簽框分別顯示是“第幾趟”排序,上部五個(gè)標(biāo)簽框分別顯示是本趟循環(huán)內(nèi)的比較次數(shù),中間部分是顯示執(zhí)行本趟循環(huán)的結(jié)果。
3 結(jié)語(yǔ)
利用多媒體技術(shù)對(duì)常用算法進(jìn)行動(dòng)態(tài)演示,可以營(yíng)造一個(gè)生動(dòng)有趣的教學(xué)情境,化無(wú)聲為有聲,化靜為動(dòng),使學(xué)生進(jìn)入一種喜聞樂見的,生動(dòng)活潑的學(xué)習(xí)氛圍,引起學(xué)生的注意力,提高學(xué)生的學(xué)習(xí)興趣。它能變靜為動(dòng),克服了傳統(tǒng)教學(xué)中學(xué)生面向靜態(tài)呆板的課文和板書的缺陷。一個(gè)成熟的算法動(dòng)態(tài)演示程序開發(fā)時(shí)雖然要費(fèi)時(shí),費(fèi)力,但由于算法的不變性,一旦開發(fā)成功,可以長(zhǎng)期使用。并且可以應(yīng)用到所有的計(jì)機(jī)語(yǔ)言課教學(xué)中,從而取得良好的教學(xué)效果。
[參考文獻(xiàn)]
[1] 柴 欣,李惠然.VISUAL BASIC 程序設(shè)計(jì)基礎(chǔ)[M].北京:中國(guó)鐵道出版社,2003:02.
[2] 劉炳文.精通VISUAL BASIC6.0中文版[M].北京:電子工業(yè)出版社,1999:113136.endprint
摘 要: 文章就冒泡法排序的動(dòng)態(tài)演示程序?qū)崿F(xiàn)的關(guān)鍵技術(shù)做了詳細(xì)的闡述,明確地提出了算法的動(dòng)態(tài)演示在計(jì)算機(jī)語(yǔ)言課教學(xué)中的重要作用。
關(guān)鍵詞: 冒泡法排序;數(shù)字移動(dòng);教學(xué)效果
中圖分類號(hào): TP311.1 [HT5H]文獻(xiàn)標(biāo)識(shí)碼: A 文章編號(hào): 10084738(2014)01010802
各種排序法是計(jì)算機(jī)語(yǔ)言課教學(xué)的難點(diǎn)與重點(diǎn)。按照傳統(tǒng)的教學(xué)模式,單純靠老師在黑板書寫與畫圖,既費(fèi)時(shí)又費(fèi)力,而且學(xué)生聽起來(lái)感到抽象,枯燥又難懂。以人機(jī)交互方式,進(jìn)行動(dòng)態(tài)演示,使抽象、枯燥的學(xué)習(xí)內(nèi)容轉(zhuǎn)化成形象、有趣、可視、可聽的動(dòng)感內(nèi)容,就能夠有效地激發(fā)學(xué)生的學(xué)習(xí)興趣,變苦學(xué)為樂學(xué),達(dá)到事半功倍的效果。下面我們以冒泡法排序?yàn)槔U述動(dòng)態(tài)演示程序的設(shè)計(jì)過程。
1 冒泡法排序的基本思想
冒泡法排序是最為常用的一種排序方法 ,它是一類具有“交換”性質(zhì)的排序方法,具體描述如下:
將序列中的第一個(gè)元素與第二個(gè)元素比較,若前者大于后者,則第一個(gè)元素與第二個(gè)元素進(jìn)行位置交換,否則不交換。
再將第二個(gè)元素與第三個(gè)元素比較,同樣若前者大于后者,則將第二元素與第三個(gè)元素進(jìn)行位置交換,否則不交換。
依次類推直到將第n-1個(gè)元素與第n個(gè)元素進(jìn)行比較為止,這個(gè)過程稱為第1趟冒泡法排序,經(jīng)過第1 趟冒泡法排序,將長(zhǎng)度為N的序列中最大的元素置于序列的尾部即第N個(gè)位置上,然后再對(duì)剩下的N-1個(gè)元素作同樣的操作,這叫作第2趟排序,將剩下的N-1個(gè)元素中最大的元素置于序列的N-1的位置上。
如此進(jìn)行下去,當(dāng)執(zhí)行完第N-1趟冒泡法排序后就可以將序列中剩下2個(gè)元素中的最大元素置于序列的第2個(gè)位置上,第1個(gè)位置上的元素就是該序列中的最小元素[1]。
2 動(dòng)態(tài)演示程序的設(shè)計(jì)
2.1 界面設(shè)計(jì)
界面最初狀態(tài)左半部分別為:初始化按鈕、排序按鈕、結(jié)束按鈕。右半部分為動(dòng)態(tài)演示區(qū),其中上部為六個(gè)標(biāo)簽框,第一個(gè)標(biāo)簽框LABEL3標(biāo)識(shí)為“排序前的數(shù)據(jù)”,其余的五個(gè)標(biāo)簽框是以LABEL2命名的標(biāo)簽框數(shù)組,用以動(dòng)態(tài)顯示第i趟排序中哪個(gè)元素與哪個(gè)元素比較,當(dāng)?shù)趇趟排序結(jié)束后,則顯示本趟排序的總共比較次數(shù)。中間部分初始為空,經(jīng)過初始化后,動(dòng)態(tài)產(chǎn)生了兩個(gè)文本框控件數(shù)組,并隨機(jī)產(chǎn)生待排序的數(shù)據(jù)。
第一個(gè)文本框控件數(shù)組為 TXT1(1To6) 用于存放排序前的數(shù)據(jù),為了模擬逼真,待排序的數(shù)據(jù)豎著存放,以便小的數(shù)據(jù)像氣泡一樣上浮,大的數(shù)據(jù)下沉。第二個(gè)文本框控件數(shù)組為txtNew(1To6, 1To6),存放時(shí)豎為行,橫為列,初始僅第一行可見,并存放待排序數(shù)據(jù)??丶?shù)組txtNew其余各行分別在第i趟排序中依次動(dòng)態(tài)顯示。界面右半部分的下部為五個(gè)標(biāo)簽框,用于動(dòng)態(tài)顯示第幾趟排序。初始化后的界面見圖1。
2.2 數(shù)字的移動(dòng)
數(shù)字的移動(dòng)與交換,是動(dòng)態(tài)演示程序?qū)崿F(xiàn)的關(guān)鍵,單純的數(shù)字是不能移動(dòng)的,為了能使數(shù)字移動(dòng),必須借助于一個(gè)載體, 在排序比較的過程中, 若發(fā)現(xiàn)前者大于后者,如何使小的數(shù)字上浮,大的數(shù)字下沉呢?這是動(dòng)態(tài)演示的關(guān)鍵。解決的辦法通常是交換數(shù)組元素中的數(shù)字,這在算法上是正確的,能得到正確的結(jié)果。但是數(shù)組元素中的數(shù)字交換是在內(nèi)存進(jìn)行的,是不可見的,達(dá)不到動(dòng)態(tài)演示的目的。如果將數(shù)組的元素(數(shù)組的元素為文本框)整體移動(dòng)互換位置,這時(shí)可以看到數(shù)字跟隨載體移動(dòng)的過程,雖然兩個(gè)元素交換了位置,但是數(shù)組元素的下標(biāo)并沒有改變,因而導(dǎo)致排序不能得到正確結(jié)果。如何既能保證排序結(jié)果的正確,又能看見小的數(shù)字上浮,大的數(shù)字下沉,在這里采取的辦法是:每當(dāng)發(fā)現(xiàn)兩個(gè)元素前者大于后者時(shí),立即調(diào)用兩個(gè)文本框即Text1和Text2作為載體,分別停靠在這兩個(gè)元素的旁邊,然后把需要交換的兩個(gè)數(shù)字分別賦給Text1和Text2(見圖2)。
下一步讓小的數(shù)字隨同文本框Text2上浮,大的數(shù)字隨同另一文本框Text1下沉,當(dāng)兩者達(dá)到要交換的位置時(shí),再把兩個(gè)數(shù)字傳送到相應(yīng)的位置,并使Text1和Text2變?yōu)椴豢梢姟_@樣既保證了待排序數(shù)組下標(biāo)及位置不變,又能看見小的數(shù)字上浮,大的數(shù)字下沉及交換的全過程。
2.3 移動(dòng)速度及終點(diǎn)的控制
為了提高演示的效果,必須對(duì)數(shù)字移動(dòng)的速度進(jìn)行控制,并計(jì)算好到達(dá)的終點(diǎn)。由于待排數(shù)據(jù)是按一定規(guī)律分布的,相鄰兩個(gè)元素間的距離是一定的。每當(dāng)發(fā)現(xiàn)txtNew(I, J)和txtNew(I, J+1)兩個(gè)元素要交換時(shí),記錄下這兩個(gè)元素的頂部的坐標(biāo)值,(這個(gè)值亦是Text1和Text2要移動(dòng)的終點(diǎn)),然后利用循環(huán)逐步改變Text1和Text2的頂點(diǎn)坐標(biāo)值,每移動(dòng)一次調(diào)用API函數(shù)中的延時(shí)函數(shù)Sleep 50(延時(shí)50毫秒),直至終點(diǎn)。這樣我們就能清晰地看到小的數(shù)字上浮,大的數(shù)字下沉的過程[2]。
代碼執(zhí)行完后界面如圖3所示,這時(shí)動(dòng)態(tài)顯示區(qū)的下部五個(gè)標(biāo)簽框分別顯示是“第幾趟”排序,上部五個(gè)標(biāo)簽框分別顯示是本趟循環(huán)內(nèi)的比較次數(shù),中間部分是顯示執(zhí)行本趟循環(huán)的結(jié)果。
3 結(jié)語(yǔ)
利用多媒體技術(shù)對(duì)常用算法進(jìn)行動(dòng)態(tài)演示,可以營(yíng)造一個(gè)生動(dòng)有趣的教學(xué)情境,化無(wú)聲為有聲,化靜為動(dòng),使學(xué)生進(jìn)入一種喜聞樂見的,生動(dòng)活潑的學(xué)習(xí)氛圍,引起學(xué)生的注意力,提高學(xué)生的學(xué)習(xí)興趣。它能變靜為動(dòng),克服了傳統(tǒng)教學(xué)中學(xué)生面向靜態(tài)呆板的課文和板書的缺陷。一個(gè)成熟的算法動(dòng)態(tài)演示程序開發(fā)時(shí)雖然要費(fèi)時(shí),費(fèi)力,但由于算法的不變性,一旦開發(fā)成功,可以長(zhǎng)期使用。并且可以應(yīng)用到所有的計(jì)機(jī)語(yǔ)言課教學(xué)中,從而取得良好的教學(xué)效果。
[參考文獻(xiàn)]
[1] 柴 欣,李惠然.VISUAL BASIC 程序設(shè)計(jì)基礎(chǔ)[M].北京:中國(guó)鐵道出版社,2003:02.
[2] 劉炳文.精通VISUAL BASIC6.0中文版[M].北京:電子工業(yè)出版社,1999:113136.endprint
摘 要: 文章就冒泡法排序的動(dòng)態(tài)演示程序?qū)崿F(xiàn)的關(guān)鍵技術(shù)做了詳細(xì)的闡述,明確地提出了算法的動(dòng)態(tài)演示在計(jì)算機(jī)語(yǔ)言課教學(xué)中的重要作用。
關(guān)鍵詞: 冒泡法排序;數(shù)字移動(dòng);教學(xué)效果
中圖分類號(hào): TP311.1 [HT5H]文獻(xiàn)標(biāo)識(shí)碼: A 文章編號(hào): 10084738(2014)01010802
各種排序法是計(jì)算機(jī)語(yǔ)言課教學(xué)的難點(diǎn)與重點(diǎn)。按照傳統(tǒng)的教學(xué)模式,單純靠老師在黑板書寫與畫圖,既費(fèi)時(shí)又費(fèi)力,而且學(xué)生聽起來(lái)感到抽象,枯燥又難懂。以人機(jī)交互方式,進(jìn)行動(dòng)態(tài)演示,使抽象、枯燥的學(xué)習(xí)內(nèi)容轉(zhuǎn)化成形象、有趣、可視、可聽的動(dòng)感內(nèi)容,就能夠有效地激發(fā)學(xué)生的學(xué)習(xí)興趣,變苦學(xué)為樂學(xué),達(dá)到事半功倍的效果。下面我們以冒泡法排序?yàn)槔U述動(dòng)態(tài)演示程序的設(shè)計(jì)過程。
1 冒泡法排序的基本思想
冒泡法排序是最為常用的一種排序方法 ,它是一類具有“交換”性質(zhì)的排序方法,具體描述如下:
將序列中的第一個(gè)元素與第二個(gè)元素比較,若前者大于后者,則第一個(gè)元素與第二個(gè)元素進(jìn)行位置交換,否則不交換。
再將第二個(gè)元素與第三個(gè)元素比較,同樣若前者大于后者,則將第二元素與第三個(gè)元素進(jìn)行位置交換,否則不交換。
依次類推直到將第n-1個(gè)元素與第n個(gè)元素進(jìn)行比較為止,這個(gè)過程稱為第1趟冒泡法排序,經(jīng)過第1 趟冒泡法排序,將長(zhǎng)度為N的序列中最大的元素置于序列的尾部即第N個(gè)位置上,然后再對(duì)剩下的N-1個(gè)元素作同樣的操作,這叫作第2趟排序,將剩下的N-1個(gè)元素中最大的元素置于序列的N-1的位置上。
如此進(jìn)行下去,當(dāng)執(zhí)行完第N-1趟冒泡法排序后就可以將序列中剩下2個(gè)元素中的最大元素置于序列的第2個(gè)位置上,第1個(gè)位置上的元素就是該序列中的最小元素[1]。
2 動(dòng)態(tài)演示程序的設(shè)計(jì)
2.1 界面設(shè)計(jì)
界面最初狀態(tài)左半部分別為:初始化按鈕、排序按鈕、結(jié)束按鈕。右半部分為動(dòng)態(tài)演示區(qū),其中上部為六個(gè)標(biāo)簽框,第一個(gè)標(biāo)簽框LABEL3標(biāo)識(shí)為“排序前的數(shù)據(jù)”,其余的五個(gè)標(biāo)簽框是以LABEL2命名的標(biāo)簽框數(shù)組,用以動(dòng)態(tài)顯示第i趟排序中哪個(gè)元素與哪個(gè)元素比較,當(dāng)?shù)趇趟排序結(jié)束后,則顯示本趟排序的總共比較次數(shù)。中間部分初始為空,經(jīng)過初始化后,動(dòng)態(tài)產(chǎn)生了兩個(gè)文本框控件數(shù)組,并隨機(jī)產(chǎn)生待排序的數(shù)據(jù)。
第一個(gè)文本框控件數(shù)組為 TXT1(1To6) 用于存放排序前的數(shù)據(jù),為了模擬逼真,待排序的數(shù)據(jù)豎著存放,以便小的數(shù)據(jù)像氣泡一樣上浮,大的數(shù)據(jù)下沉。第二個(gè)文本框控件數(shù)組為txtNew(1To6, 1To6),存放時(shí)豎為行,橫為列,初始僅第一行可見,并存放待排序數(shù)據(jù)??丶?shù)組txtNew其余各行分別在第i趟排序中依次動(dòng)態(tài)顯示。界面右半部分的下部為五個(gè)標(biāo)簽框,用于動(dòng)態(tài)顯示第幾趟排序。初始化后的界面見圖1。
2.2 數(shù)字的移動(dòng)
數(shù)字的移動(dòng)與交換,是動(dòng)態(tài)演示程序?qū)崿F(xiàn)的關(guān)鍵,單純的數(shù)字是不能移動(dòng)的,為了能使數(shù)字移動(dòng),必須借助于一個(gè)載體, 在排序比較的過程中, 若發(fā)現(xiàn)前者大于后者,如何使小的數(shù)字上浮,大的數(shù)字下沉呢?這是動(dòng)態(tài)演示的關(guān)鍵。解決的辦法通常是交換數(shù)組元素中的數(shù)字,這在算法上是正確的,能得到正確的結(jié)果。但是數(shù)組元素中的數(shù)字交換是在內(nèi)存進(jìn)行的,是不可見的,達(dá)不到動(dòng)態(tài)演示的目的。如果將數(shù)組的元素(數(shù)組的元素為文本框)整體移動(dòng)互換位置,這時(shí)可以看到數(shù)字跟隨載體移動(dòng)的過程,雖然兩個(gè)元素交換了位置,但是數(shù)組元素的下標(biāo)并沒有改變,因而導(dǎo)致排序不能得到正確結(jié)果。如何既能保證排序結(jié)果的正確,又能看見小的數(shù)字上浮,大的數(shù)字下沉,在這里采取的辦法是:每當(dāng)發(fā)現(xiàn)兩個(gè)元素前者大于后者時(shí),立即調(diào)用兩個(gè)文本框即Text1和Text2作為載體,分別停靠在這兩個(gè)元素的旁邊,然后把需要交換的兩個(gè)數(shù)字分別賦給Text1和Text2(見圖2)。
下一步讓小的數(shù)字隨同文本框Text2上浮,大的數(shù)字隨同另一文本框Text1下沉,當(dāng)兩者達(dá)到要交換的位置時(shí),再把兩個(gè)數(shù)字傳送到相應(yīng)的位置,并使Text1和Text2變?yōu)椴豢梢?。這樣既保證了待排序數(shù)組下標(biāo)及位置不變,又能看見小的數(shù)字上浮,大的數(shù)字下沉及交換的全過程。
2.3 移動(dòng)速度及終點(diǎn)的控制
為了提高演示的效果,必須對(duì)數(shù)字移動(dòng)的速度進(jìn)行控制,并計(jì)算好到達(dá)的終點(diǎn)。由于待排數(shù)據(jù)是按一定規(guī)律分布的,相鄰兩個(gè)元素間的距離是一定的。每當(dāng)發(fā)現(xiàn)txtNew(I, J)和txtNew(I, J+1)兩個(gè)元素要交換時(shí),記錄下這兩個(gè)元素的頂部的坐標(biāo)值,(這個(gè)值亦是Text1和Text2要移動(dòng)的終點(diǎn)),然后利用循環(huán)逐步改變Text1和Text2的頂點(diǎn)坐標(biāo)值,每移動(dòng)一次調(diào)用API函數(shù)中的延時(shí)函數(shù)Sleep 50(延時(shí)50毫秒),直至終點(diǎn)。這樣我們就能清晰地看到小的數(shù)字上浮,大的數(shù)字下沉的過程[2]。
代碼執(zhí)行完后界面如圖3所示,這時(shí)動(dòng)態(tài)顯示區(qū)的下部五個(gè)標(biāo)簽框分別顯示是“第幾趟”排序,上部五個(gè)標(biāo)簽框分別顯示是本趟循環(huán)內(nèi)的比較次數(shù),中間部分是顯示執(zhí)行本趟循環(huán)的結(jié)果。
3 結(jié)語(yǔ)
利用多媒體技術(shù)對(duì)常用算法進(jìn)行動(dòng)態(tài)演示,可以營(yíng)造一個(gè)生動(dòng)有趣的教學(xué)情境,化無(wú)聲為有聲,化靜為動(dòng),使學(xué)生進(jìn)入一種喜聞樂見的,生動(dòng)活潑的學(xué)習(xí)氛圍,引起學(xué)生的注意力,提高學(xué)生的學(xué)習(xí)興趣。它能變靜為動(dòng),克服了傳統(tǒng)教學(xué)中學(xué)生面向靜態(tài)呆板的課文和板書的缺陷。一個(gè)成熟的算法動(dòng)態(tài)演示程序開發(fā)時(shí)雖然要費(fèi)時(shí),費(fèi)力,但由于算法的不變性,一旦開發(fā)成功,可以長(zhǎng)期使用。并且可以應(yīng)用到所有的計(jì)機(jī)語(yǔ)言課教學(xué)中,從而取得良好的教學(xué)效果。
[參考文獻(xiàn)]
[1] 柴 欣,李惠然.VISUAL BASIC 程序設(shè)計(jì)基礎(chǔ)[M].北京:中國(guó)鐵道出版社,2003:02.
[2] 劉炳文.精通VISUAL BASIC6.0中文版[M].北京:電子工業(yè)出版社,1999:113136.endprint