冒泡排序的算法及其程序?qū)崿F(xiàn)_第1頁(yè)
冒泡排序的算法及其程序?qū)崿F(xiàn)_第2頁(yè)
冒泡排序的算法及其程序?qū)崿F(xiàn)_第3頁(yè)
冒泡排序的算法及其程序?qū)崿F(xiàn)_第4頁(yè)
冒泡排序的算法及其程序?qū)崿F(xiàn)_第5頁(yè)
已閱讀5頁(yè),還剩9頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

冒泡排序的算法及其程序?qū)崿F(xiàn)教學(xué)分析:本節(jié)課是浙江教育出版社出版的普通高中課程標(biāo)準(zhǔn)實(shí)驗(yàn)教科書《算法與程序設(shè)計(jì)》第二第3節(jié)以及第五章第3節(jié)的部分教學(xué)內(nèi)容。一組不長(zhǎng)的數(shù)據(jù)(如5個(gè)),從小到大排序,對(duì)學(xué)生來說是一件容易的事情,但他們并不知道計(jì)算機(jī)是怎么實(shí)現(xiàn)排序的,同時(shí)他們也沒見識(shí)過計(jì)算機(jī)對(duì)大量數(shù)據(jù)(如1000個(gè))的排序。學(xué)習(xí)排序有助于學(xué)生對(duì)計(jì)算機(jī)工作原理的認(rèn)識(shí)。冒泡排序?qū)W(xué)生來說初次接觸,但前面的枚舉算法和解析算法的部分內(nèi)容對(duì)學(xué)習(xí)排序有一定的幫助,如數(shù)組變量的定義及使用方法、雙重循環(huán)的使用方法及特點(diǎn)以及如何通過鍵盤輸入一批數(shù)據(jù)(即text1_keypress()事件)在前面都已涉及,冒泡排序的學(xué)習(xí)又可以鞏固前面的知識(shí)。關(guān)于冒泡排序的算法及程序?qū)崿F(xiàn)我安排了3個(gè)課時(shí),本案例是在教室內(nèi)完成的2節(jié)隨堂課,第3課時(shí)安排學(xué)生上機(jī)實(shí)踐:對(duì)鍵盤輸入的一批數(shù)據(jù)進(jìn)行冒泡排序。教學(xué)目標(biāo):1、知識(shí)與技能:了解排序及冒泡排序的概念及特點(diǎn)掌握冒泡排序算法的原理初步掌握冒泡排序的程序?qū)崿F(xiàn)2、過程與方法:理解冒泡排序的分析過程,并初步掌握用冒泡排序算法來設(shè)計(jì)解決簡(jiǎn)單的排序問題3、情感態(tài)度與價(jià)值觀:通過冒泡排序算法的分析過程,培養(yǎng)學(xué)生思維的嚴(yán)謹(jǐn)性以及用科學(xué)方法解決問題的能力使學(xué)生深入理解計(jì)算機(jī)的工作原理,激發(fā)了學(xué)生學(xué)習(xí)程序興趣。教學(xué)重點(diǎn):冒泡排序算法的原理教學(xué)難點(diǎn):分析冒泡排序的實(shí)現(xiàn)過程教學(xué)策略:講授法與探究法。教師講授、學(xué)生聽講,教師提問、學(xué)生動(dòng)腦,層層深入,步步為營(yíng),一切水到渠成。教學(xué)準(zhǔn)備:編寫好手動(dòng)輸入一批的數(shù)據(jù)的冒泡排序的程序編寫好計(jì)算機(jī)自動(dòng)生成數(shù)據(jù)的冒泡排序的程序課堂中使用的教學(xué)課件教學(xué)過程:一、問題引入問題一:什么是排序?所謂排序,把雜亂無章的一列數(shù)據(jù)變?yōu)橛行虻臄?shù)據(jù),比如7,3,4,8,1這五個(gè)數(shù)據(jù)從小到大排序,結(jié)果是1,3,4,7,8,我們很容易排出來。那么電腦是怎么進(jìn)行排序的呢?問題二:一批數(shù)據(jù)在VB中如何存儲(chǔ)的?比如如何存儲(chǔ)六位裁判為一位運(yùn)動(dòng)員評(píng)出的分?jǐn)?shù)?用數(shù)組變量來存儲(chǔ)一批類型、作用相同的數(shù)據(jù),如分別用d(1),d(2),d(3),d(4),d(5),d(6)來存儲(chǔ)六位裁判給出的分?jǐn)?shù)。問題三:如果運(yùn)動(dòng)員的最后得分是從這6個(gè)分?jǐn)?shù)中去掉最高分與最低分后的平均分,你認(rèn)為怎么得到?調(diào)整數(shù)組d中所有數(shù)據(jù)的存儲(chǔ)位置,使最小的數(shù)據(jù)存儲(chǔ)在d(1)中,最大的數(shù)據(jù)存儲(chǔ)在d(6)中,使所有數(shù)據(jù)滿足:d(1)≤d(2)≤d(3)≤d(4)≤d(5)≤d(6)二、冒泡排序的算法及程序?qū)崿F(xiàn)1、冒泡排序(bubblesort)的思想在一列數(shù)據(jù)中把較小的數(shù)據(jù)逐次向上推移的一種技術(shù)。冒泡排序把待排序的n個(gè)元素的數(shù)組看成是垂直堆放的一列數(shù)據(jù),從最下面的一個(gè)元素起,自下而上地比較相鄰的兩個(gè)元素中的數(shù)據(jù),將較小的數(shù)據(jù)換到上面的一個(gè)元素中。重復(fù)這一過程,直到處理完最后兩個(gè)元素中的數(shù)據(jù),稱為一遍加工。當(dāng)?shù)谝槐榧庸ね瓿蓵r(shí),最小數(shù)據(jù)已經(jīng)上升到第一個(gè)元素位置。然后對(duì)余下的n-1個(gè)元素重復(fù)上述處理過程,直至最后進(jìn)行余下兩個(gè)數(shù)據(jù)的比較和交換。2、提出待排序的任務(wù)有下面一組數(shù)據(jù),7、3、4、8、1,用冒泡法(逐次向上推移)實(shí)現(xiàn)從小到大的排序,假如這5個(gè)數(shù)據(jù)分別用數(shù)組變量a的5個(gè)數(shù)組元素a(1)、a(2)、a(3)、a(4)、a(5)來存儲(chǔ)變量變量a(1)a(2)a(3)a(4)a(5)初始73481結(jié)果134783、冒泡排序的算法及程序初步實(shí)現(xiàn)(1)第一遍加工:演示:打開冒泡.swf,演示如下圖1圖1問題一:最小數(shù)據(jù)1是如何進(jìn)行逐次向上推移到達(dá)第一個(gè)數(shù)據(jù)位置的,即a(1)=1?演示如下圖2:第五位置(即a(5))的1與第四位置(即a(4))的8比較,交換;第四位置(即a(4))的1與第三位置(即a(3))的4比較,交換;前三位置(即a(3))的1與第二位置(即a(2))的3比較,交換;第二位置(即a(2))的1與第一位置(即a(1))的7比較,交換;圖2說明:當(dāng)?shù)谖鍌€(gè)位置的數(shù)據(jù)1從上升到第一個(gè)位置,稱為第一遍加工問題二:第一遍加工的結(jié)果?a(1)=1,a(2)~a(5)為無序區(qū)域。問題三:比較了幾次?交換了幾次?比較交換的條件是什么?比較4次,交換4次,即相鄰位置的兩個(gè)數(shù)據(jù)比較,如果a(j)<a(j-1),則交換問題五:4次比較與交換,可以用VB的哪個(gè)算法模式來實(shí)現(xiàn)?如何描述For循環(huán)+If選擇fori=5to2step-1ifa(i)<a(i-1)then交換nextifori=5to2step-1ifa(i)<a(i-1)then交換nexti根據(jù)代碼解釋:最末位置的數(shù)據(jù)與前面相鄰位置的數(shù)據(jù)發(fā)生比較,如果小于前面位置的數(shù)據(jù),則交換;重復(fù)這一過程,直到處理完第二個(gè)位置的數(shù)據(jù)與第一個(gè)位置的數(shù)據(jù)為止,完成第一遍加工問題六:比較下面兩組代碼,你認(rèn)為哪組好?為什么?fori=4tofori=4to1step-1ifa(i+1)<a(i)then交換nextifori=5to2step-1ifa(i)<a(i-1)then交換nexti第一組好,因?yàn)榈谝唤M更清楚表達(dá)第一遍的加工過程,也更易理解。(2)第二遍加工(邊提問邊回答,邊演示,如圖3)圖3問題一:第二遍加工的數(shù)據(jù)區(qū)域?yàn)槟男窟^程是怎樣的?數(shù)據(jù)區(qū)域?yàn)閍(2)~a(5)的無序的區(qū)域第五個(gè)位置的8與第四位置的4發(fā)生比較,不交換;第四個(gè)位置的4與第三個(gè)位置的3比較,不交換;第三個(gè)位置的3與第二個(gè)位置的7比較,交換;完成第二遍加工(見圖3)問題二:第二遍加工的結(jié)果怎樣?實(shí)現(xiàn)的代碼如何?結(jié)果a(2)=3,a(3)~a(5)是無序區(qū)域代碼如下:fori=5tofori=5to3step-1ifa(i)<a(i-1)then交換nexti問題三:第二遍加工,比較了幾次,交換了幾次?比較了3次,交換了1次(3)第三遍加工(邊提問邊回答,邊演示,如圖4)問題一:第三遍加工的結(jié)果、過程又如何?語(yǔ)句呢?第三遍加工的結(jié)果:a(3)=4,a(4)~a(5)為無序區(qū)域第五個(gè)位置的8與第四個(gè)位置4的比較,不交換;第四個(gè)位置的4與第三個(gè)位置的7比較,交換;完成第三遍加工實(shí)現(xiàn)的語(yǔ)句:fori=5tofori=5to4step-1ifa(i)<a(i-1)then交換nexti問題二:比較和交換的次數(shù)各是多少?比較了2次,交換了1次圖4(4)第四遍加工問題一:第四遍加工的結(jié)果?實(shí)現(xiàn)的代碼?第四遍加工的結(jié)果:a(4)=7,a(5)=8實(shí)現(xiàn)的語(yǔ)句:fori=5tofori=5to5step-1ifa(i)<a(i-1)then交換nexti問題二:第四遍加工比較、交換的次數(shù)各多少?比較了1次,交換了0次4、5個(gè)數(shù)據(jù)冒泡排序的程序?qū)崿F(xiàn)問題一:五個(gè)數(shù)據(jù)通過冒泡排序,完成從小到大的順序,需要加工幾遍?如果是n個(gè)數(shù)據(jù)呢?4遍,n-1遍問題二:4遍加工的共同點(diǎn)是什么?不同點(diǎn)又是什么?相同點(diǎn):都是重復(fù)比較(循環(huán)結(jié)構(gòu)),相同的比較方法和相同的交換條件不同點(diǎn):比較與交換的次數(shù)不一樣問題三:4遍加工是否可以用雙重循環(huán)來實(shí)現(xiàn)?可以,代碼如下:forj=1to4fori=5toj+1step-1ifa(i)<a(i-1)thenforj=1to4fori=5toj+1step-1ifa(i)<a(i-1)then交換nextinextj說明:對(duì)于循環(huán)次數(shù)確定的循環(huán),比如循環(huán)4次,使用For循環(huán),循環(huán)變量的變化方式有多種表達(dá),如Forj=2to5或者forj=4to7等,但我們選擇forj=1to4,因?yàn)樗亲钜桌斫獾囊环N表達(dá)問題四:4遍加工一共比較了幾次?交換了幾次?比較的次數(shù)為:4+3+2+1=10;交換的次數(shù)為:4+1+1=65、n個(gè)數(shù)據(jù)冒泡排序的通用代碼Fori=1ton-1forj=ntoi+1step-1Fori=1ton-1forj=ntoi+1step-1ifa(j)<a(j-1)then互換nextjNexti問題一:在通用代碼中,外、內(nèi)循環(huán)的條件各是什么?外循環(huán)的循環(huán)條件為:i<=n-1;內(nèi)循環(huán)的循環(huán)條件為:j>=i+1(j>i)問題二:在通用代碼中,外、內(nèi)循環(huán)的意義是什么?外循環(huán)是加工的遍數(shù),n個(gè)數(shù)據(jù)需要加工n-1遍內(nèi)循環(huán)是每一遍的具體加工過程問題三:如何實(shí)現(xiàn)a(j)與a(j-1)的交換?使用什么語(yǔ)句學(xué)生回答:通過第三個(gè)變量tempTemp=A(j)A(j)=A(j-1)A(j-1)=TempTemp=A(j)A(j)=A(j-1)A(j-1)=Temp6、演示冒泡排序算法.swf,觀察流程圖,體驗(yàn)流程的執(zhí)行過程,并請(qǐng)學(xué)生用語(yǔ)言表達(dá)程序運(yùn)行過程三、對(duì)鍵盤輸入的一批數(shù)據(jù)進(jìn)行冒泡排序1、關(guān)于程序的界面問題一:你能想象出程序的界面嗎?學(xué)生思考后并給展示如下的建議界面:?jiǎn)栴}二:根據(jù)此界面,你能大致描述一下程序的運(yùn)行過程嗎?在黃色文本框內(nèi)輸入數(shù)據(jù)后,按回車鍵,在左邊列表框list1內(nèi)顯示輸入的數(shù)據(jù),依次輸入一批數(shù)據(jù),然后單擊“冒泡排序”按鈕,在列表框list2中顯示已排完序的一列數(shù)據(jù)問題三:界面上有幾個(gè)對(duì)象?一個(gè)窗體(form1)、二個(gè)列表框(list1、list2)、一個(gè)文本框(text1)、一個(gè)命令按鈕(command1)和三個(gè)標(biāo)簽(label1、label2、label3)問題四:在哪些對(duì)象上發(fā)生哪些事件?在text1的keypress事件和command1的click事件2、編寫事件的代碼問題一:請(qǐng)嘗試編寫text1_keypress()事件的代碼SubText1_KeyPress(KeyAsciiAsInteger)IfKeyAscii=13ThenSubText1_KeyPress(KeyAsciiAsInteger)IfKeyAscii=13Thenc=c+1a(c)=Val(Text1.Text)List1.AddItema(c)Text1.Text="":Text1.SetFocusEndIfEndSub說明:text1_keyPress()事件,在計(jì)算并聯(lián)電阻的總電阻值時(shí)已使用過,所不同的是增加了計(jì)數(shù)功能。問題二:當(dāng)在text1中用鍵盤輸入回車鍵后,做些什么內(nèi)容?計(jì)數(shù)(c=c+1)給數(shù)組變量a賦值數(shù)組變量

的值在list1中顯示text1清空,并把光標(biāo)聚焦在text1中問題三:為什么要計(jì)數(shù)?(c=c+1)計(jì)數(shù)是為了統(tǒng)計(jì)待排序數(shù)據(jù)的個(gè)數(shù)問題四:數(shù)組變量a和變量c需要在text1_keypress()事件中定義嗎?不用,作全局性變量處理,在兩個(gè)模塊外添加如下兩行:Dima(1to128Dima(1to128)asintegerDimcAsInteger說明:全局性變量的處理在計(jì)算并聯(lián)電路的總電阻中已學(xué)習(xí)過。問題五:如果要手動(dòng)輸入50個(gè)待排序的數(shù)據(jù),需要執(zhí)行text1_keypress()事件幾遍?50遍問題六:請(qǐng)嘗試編寫command1_click()事件SubCommand1_Click()SubCommand1_Click()ForI=1Toc-1ForJ=cToI+1Step-1Ifa(J)<a(J-1)ThenTEMP=a(J):a(J)=a(J-1):a(J-1)=TEMPEndIfNextJNextIForI=1TocList2.AddItema(I)NextIEndSub問題七:command1_click()事件實(shí)現(xiàn)哪幾項(xiàng)功能??jī)身?xiàng)功能:一項(xiàng)是冒泡排序,一項(xiàng)是把已排好序的數(shù)組a輸出(用for循環(huán)實(shí)現(xiàn))教師演示事先編好的程序,讓學(xué)生觀察并體驗(yàn)程序的執(zhí)行過程3、關(guān)于程序的升降序功能問題一:如果要實(shí)現(xiàn)升降序的功能,界面與代碼如何修改?①界面修改:添加一控件combobox,生成combo1對(duì)象②Command1_click()代碼修改如下:ForI=1Toc-1ForI=1Toc-1ForJ=cToI+1Step-1IfCombo1.Text=“升序"ThenIfa(J)<a(J-1)ThenTEMP=a(J):a(J)=a(J-1):a(J-1)=TEMPEndIfElseIfa(J)>a(J-1)ThenTEMP=a(J):a(J)=a(J-1):a(J-1)=TEMPEndIfEndIfNextJNextIForI=1TocList2.AddItema(I)NextIEndSub說明:else后面即為降序排序,比較的條件由原來a(J)<a(J-1)改為a(J)>a(J-1)即可。③添加一窗體加載模塊SubForm_Load()SubForm_Load()Combo1.AddItem“升序"Combo1.AddItem“降序"Combo1.

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論