楊紹軍
(湖北省恩施高中)
浙教版的《算法與程序設(shè)計(jì)》,在第五章第二節(jié)中對(duì)冒泡排序算法進(jìn)行了實(shí)現(xiàn)。處理教材的時(shí)候筆者將第三章提前,為第二章、第五章打下基礎(chǔ)。一是加深學(xué)生對(duì)算法與程序設(shè)計(jì)關(guān)系的體會(huì);二是可以通過(guò)程序的實(shí)現(xiàn)加深對(duì)算法的理解。
學(xué)生已經(jīng)學(xué)習(xí)過(guò)VB程序基礎(chǔ)和VB控制結(jié)構(gòu),對(duì)簡(jiǎn)單的分支、循環(huán)等流程有了較清楚的認(rèn)識(shí),也實(shí)現(xiàn)過(guò)一些程序,但是對(duì)于二重循環(huán)以及循環(huán)與分支的嵌套還比較陌生。在排序算法中,對(duì)于內(nèi)外層循環(huán)的作用以及循環(huán)參數(shù)的設(shè)置可能會(huì)產(chǎn)生一些不合理或是錯(cuò)誤,這需要通過(guò)實(shí)踐的體驗(yàn)進(jìn)行強(qiáng)化理解。
知識(shí)與技能目標(biāo):熟練掌握冒泡排序工作原理,能利用冒泡排序思想對(duì)任意給定的一個(gè)數(shù)列進(jìn)行排序,培養(yǎng)學(xué)生的動(dòng)手能力。
過(guò)程與方法目標(biāo):利用合作學(xué)習(xí)、小組探究等方式熟練理解并掌握冒泡排序算法。
情感態(tài)度與價(jià)值觀目標(biāo):培養(yǎng)學(xué)生分析問(wèn)題、發(fā)現(xiàn)規(guī)律的能力,激發(fā)學(xué)生的熱情,提升學(xué)生的信息素養(yǎng)。
冒泡排序工作方式,工作原理的解析,歸納算法
冒泡排序工作原理的分析,算法設(shè)計(jì)
第一組前五位同學(xué)分別給一張卡片,卡片上寫(xiě)的是數(shù)字8、56、40、17、23。
游戲規(guī)則:從第一組第五位同學(xué)開(kāi)始往前,依次與前一位學(xué)生拿到的卡片比較,如果后一位學(xué)生卡片上的數(shù)字比前一位學(xué)生的小,兩個(gè)人互換位置,直到比較到最前面一位同學(xué)為止。
其他同學(xué)觀察。
師:你們看到了什么?
生:(討論并說(shuō)自己的想法。)
師:我剛才聽(tīng)到同學(xué)們的發(fā)言了,最小的數(shù)在最前面了,比較了4次,交換了2次。
師:如果讓所有拿卡片的同學(xué)按照從小到大的順序就座,我們?nèi)绾翁幚砟??其?shí)剛才第一組的五位同學(xué)就給我們展示了一種排序的方法,我們稱冒泡排序。究竟什么是排序呢?把雜亂無(wú)章的數(shù)據(jù)變?yōu)橛行驍?shù)據(jù)的過(guò)程我們稱為排序。排序在我們?nèi)粘I钪袘?yīng)用比較廣泛,比如說(shuō),每一次大型考試之后的排名,第一次體育課上的排隊(duì)等等。冒泡排序,顧名思義,形容較小的數(shù)據(jù)像水中的氣泡一樣,氣泡的質(zhì)量比水輕,往上飄。我們來(lái)一起看看剛才第一組同學(xué)在交換座位中的思路吧,我們把剛才同學(xué)的卡片按照順序存儲(chǔ)在數(shù)組中,數(shù)組大家還熟悉吧,在我發(fā)的導(dǎo)學(xué)案中對(duì)數(shù)組的相關(guān)知識(shí)再次介紹,不熟悉的同學(xué)可以看看。我們找一位同學(xué)上來(lái)寫(xiě)一下我們第一次比較、交換的情況。
生:上臺(tái)演示剛才的處理過(guò)程。
師:課件展示排序的過(guò)程(實(shí)例分析),課件展示每一次排序結(jié)果。
觀察每一次比較次數(shù)。
用i表示處理遍數(shù),用j表示數(shù)組元素下標(biāo)變化
第1遍處理:i=1
d(j) d(j) d(j) d(j) 第2遍處理:i=2 d(j) d(j) d(j) 第3遍處理:i=3 d(j) d(j) 第4遍處理:i=4 d(j) 數(shù)組中有n個(gè)元素d(1)~d(n)時(shí) 處理遍數(shù)i:n-1遍;i=1Ton-1 每遍比較次數(shù):n-i次 每遍比較時(shí)下標(biāo)j的變化:j=nToi+1step-1 總比較次數(shù):(n-1)+(n-2)+…1 n*(n-1)/2次 冒泡排序算法設(shè)計(jì)(導(dǎo)學(xué)案二) 在什么情況下需要交換 生:排序的遍數(shù)用I表示,I的變化是從1到n-1 每一遍比較的次數(shù)用J表示,J的變化是從n到I+1 比較d(j)和d(j-1)之間的關(guān)系,如果d(j) 交換需要一個(gè)變量臨時(shí)存儲(chǔ)數(shù)據(jù),我們用temp,這樣我們?cè)O(shè)計(jì)的算法是二重循環(huán)+選擇結(jié)構(gòu),內(nèi)循環(huán)的循環(huán)體是選擇結(jié)構(gòu)。 師:引導(dǎo)學(xué)生歸納,學(xué)生回答結(jié)束后點(diǎn)評(píng)總結(jié)。 二重循環(huán)+條件語(yǔ)句 Fori=1ton-1 Forj=ntoi+1step-1 Ifd(j) temp=d(j) d(j)=d(j-1) d(j-1)=temp EndIf Nextj Nexti 如果要按照從大到小次序排序,應(yīng)如何修改冒泡算法?3.得出結(jié)論
4.分組探究
5.算法設(shè)計(jì)
6.課堂拓展