● 教材分析
《排序》是浙江教育出版社出版的《算法與程序設(shè)計?選修1》第二章第三節(jié)的內(nèi)容。在計算機(jī)科學(xué)中,排序算法是基礎(chǔ)算法,在實(shí)際編程中有著廣泛的應(yīng)用,而冒泡排序是其中一種很典型而且相對簡單的方法。學(xué)習(xí)它為后面將學(xué)習(xí)的選擇排序做了鋪墊。通過冒泡排序的學(xué)習(xí),可以提高學(xué)生的程序設(shè)計能力,為今后在算法與程序設(shè)計方面的進(jìn)一步學(xué)習(xí)打下基礎(chǔ)。
● 學(xué)生分析
學(xué)生已經(jīng)掌握了算法設(shè)計的基本知識,能用自然語言和流程圖解決問題,對循環(huán)結(jié)構(gòu)的流程圖以及數(shù)組的使用方法都較熟悉。考慮到我校學(xué)生整體素質(zhì)一般,知識連貫和綜合應(yīng)用能力較弱,為了學(xué)生能更快地掌握冒泡排序算法,所以在課前安排了對“數(shù)組”及“兩個變量的值交換”的復(fù)習(xí)。
● 教學(xué)目標(biāo)
知識與能力目標(biāo):掌握冒泡排序的原理;理解冒泡排序的流程圖;能編寫簡單冒泡排序的程序。
過程與方法目標(biāo):學(xué)會使用冒泡排序思想解決簡單排序問題的算法;進(jìn)一步理解程序設(shè)計的基本方法,體會程序設(shè)計在現(xiàn)實(shí)中的作用。
情感、態(tài)度與價值觀目標(biāo):培養(yǎng)分析問題、解決問題的能力,培養(yǎng)探究能力,激發(fā)學(xué)習(xí)熱情。
● 教學(xué)的重、難點(diǎn)
重點(diǎn):理解冒泡排序原理。
難點(diǎn):理解冒泡排序中的內(nèi)外循環(huán)次數(shù)。
● 課時安排
本部分分三課時進(jìn)行。第一課時講解排序的廣泛性、重要性,介紹冒泡排序原理,尤其是冒泡排序中的兩重循環(huán)的次數(shù)。第二、三課時講解冒泡與選擇排序的區(qū)別以及結(jié)合第五章第三節(jié)進(jìn)行程序?qū)崿F(xiàn)等。
● 媒體準(zhǔn)備
教學(xué)準(zhǔn)備:冒泡排序的課件、冒泡排序Flash動畫、撲克牌、紙杯。
教學(xué)環(huán)境設(shè)計與布置:多媒體網(wǎng)絡(luò)教室、投影機(jī)、多媒體教學(xué)平臺、Flash軟件、Excel軟件。
● 教學(xué)過程
1.導(dǎo)入新課
準(zhǔn)備工作:課前教師先給每組(機(jī)房共8組,每組5人)隨機(jī)分5張撲克牌,要求每人手里持一張牌。
師:排序在我們的學(xué)習(xí)生活中隨處可見,如成績排序、交易量排序等。可以說有數(shù)字,就有排序。這節(jié)課我們的任務(wù)就是把同學(xué)手中的牌按從小到大進(jìn)行排序。在各組內(nèi)進(jìn)行排序。
每組同學(xué)根據(jù)手里的牌,從小到大進(jìn)行排序(即小的牌在前面,大的牌在后面)。如何把一組的撲克牌數(shù)字進(jìn)行排序呢?有什么方法呢?
生1:把這組數(shù)字存放在Excel里面,點(diǎn)擊排序就可以了。
生2:與自己前排和后排同學(xué)分別進(jìn)行比較,并進(jìn)行交換。
師:Excel里面的升序和降序是很方便。今天,我們自己編一個程序來實(shí)現(xiàn)此功能。排序過程需要兩兩比較。如何進(jìn)行兩兩比較呢?一組數(shù)字相當(dāng)于存放在一個數(shù)組里面,如Excel中一列數(shù)據(jù),每個數(shù)據(jù)都對應(yīng)一個地址。一列數(shù)據(jù)定義為一個數(shù)組,如Dim a[1,5]as integer。即每個元素如表1。
表1
如何交換數(shù)組a中元素a[2],a[3]呢?假如我拿出兩個杯子,一杯裝有熱牛奶,另一杯裝有橙汁,如何進(jìn)行交換呢?
生:需要引入一個空杯子。
師:對,也就是說我們需要引入一個變量,代碼如表2。
表2
2.親身實(shí)踐
小組學(xué)生親身實(shí)踐,從小到大排序手中撲克牌(給學(xué)生足夠的時間)。
師:大家注意,在排序時,我們需要兩兩進(jìn)行比較(從排尾出發(fā))。
學(xué)生觀看冒泡排序動畫演示。
師:同學(xué)們有沒有發(fā)現(xiàn),每遍排序完成后,都會冒出一個較小的數(shù)字。顧名思義,這種排序方法稱為冒泡排序。
3.突破重難點(diǎn)
問題1:5個數(shù)字需要加工幾遍?即每遍加工后,都冒出一個數(shù)字。
生:5個數(shù)需要加工5遍。
師:加工5遍也正確,每一遍加工,確定了數(shù)組中一個數(shù)。但是從程序的優(yōu)化設(shè)計考慮,5個數(shù)排序,加工4遍就可以。即數(shù)組中確定了n-1個數(shù),第n個數(shù)自然就確定。
問題2:每一遍加工,有哪些數(shù)參與兩兩比較?如第1遍有哪些數(shù)參與交換?第2遍又有哪些數(shù)參與交換,還是跟第1遍數(shù)相同嗎?
某生回答如表3。
師:能否讓所有數(shù)每遍都參與比較交換呢?
生:可以,但從優(yōu)化設(shè)計角度,沒有必要每個元素每遍都參與。因?yàn)槊恳槐槎家呀?jīng)冒泡出一個數(shù)字。此數(shù)字在第二遍中,就不需要參與排序。
教師在Excel中再次演示過程,如圖1。
4.引出程序核心代碼(如表4)
5.實(shí)踐與提高
問題1:給出4個待排序數(shù)67、98、100、85,在Excel中寫出外循環(huán)次數(shù)以及內(nèi)循環(huán)交換次數(shù)。并得出結(jié)論,排序完后,兩兩之間的數(shù)據(jù)共交換幾次呢?
問題2:根據(jù)流程圖,進(jìn)行程序填空。2008年北京奧運(yùn)會有很多個國家或地區(qū)參加,開幕式按照國家或地區(qū)英文名首字母的前后次序出場,已知其中七個國家或地區(qū)的名字(如表5),請寫出冒泡后出場的次序表(如表6、圖2)。尤其要注意數(shù)組類型以及賦值。
表5
6.總結(jié)評價
冒泡排序的原理:把較小的數(shù)據(jù)逐次向上推移,從最后一個元素起,依次比較相鄰的兩個元素中的數(shù)據(jù),將較小的數(shù)據(jù)調(diào)換到上面。
師:冒泡排序是最基本的排序。從程序優(yōu)化考慮,4個數(shù)字經(jīng)過冒泡排序后,共交換多少次?
學(xué)生回答如表7,并總結(jié)出n個數(shù)參與冒泡排序交換次數(shù)為n×(n-1)
÷2。
● 教學(xué)反思
冒泡排序算法是用多重循環(huán)實(shí)現(xiàn)的,學(xué)生初次接觸在理解上有點(diǎn)困難。本節(jié)課教學(xué)過程突顯“先動手后觀看,先具體后抽象”的教學(xué)思路,體現(xiàn)了新課程教學(xué)原則的一種特征,它是指在教學(xué)的流程上先經(jīng)過學(xué)生自主或合作性的學(xué)習(xí)、探究,教師再進(jìn)行點(diǎn)撥。
新課程理念要求以學(xué)生為中心,引導(dǎo)學(xué)生注意尋找、發(fā)現(xiàn)身邊的實(shí)際問題,進(jìn)而設(shè)計出算法和計算機(jī)程序解決這些問題。計算機(jī)程序如果從全局上去看,會顯得很復(fù)雜,設(shè)計“從具體例子過渡到抽象化程序”的教學(xué)思路,簡化了難度,學(xué)生可以從已經(jīng)掌握的基本語句出發(fā),經(jīng)過逐步完善,最終理解并設(shè)計出完整的程序,從而培養(yǎng)算法思維,提高能力,提升信息素養(yǎng)。
注:本文中所涉及到的圖表、注解、公式等內(nèi)容請以PDF格式閱讀原文