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