【設計意圖】通過動畫課件展示排序過程,幫助學生理解排序原理。
如果用偽代碼可表示為:
第1次冒泡排序時需要比較4次, j 從 0 開始到3:
For j=0 to 3
if a(j)>a(j+1) then 交換a(j) 和a(j+1)的值
第2次冒泡排序時需要比較3次, j 從0 開始到2:
For j= 0 to 2
if a(j)>a(j+1) then 交換a(j) 和a(j+1)的值
第3次冒泡排序時需要比較2次, j 從 0 開始到1:
For j= 0 to 1
if a(j)>a(j+1) then 交換a(j) 和a(j+1)的值
第4次冒泡排序時需要比較1次, j 從 0 開始到0:
For j= 0 to 0
if a(j)>a(j+1) then 交換a(j) 和a(j+1)的值
師:如果我們用一個變i(值分別為0,1,2,3)來表示第1趟、第2趟、第3趟、第4趟的話,那我們能不能將上述四段代碼合并成一段通用的代碼呢?教師展示下圖:本論文由論文格式網整理,轉載請注明來源www.donglienglish.cn,更多論文,請點論文格式范文查看
趟次 I的值 j值變化 j的值
1 0 0 1 2 3 3
2 1 0 1 2 2
3 2 0 1 1
4 3 0 0
生:能(學生講偽代碼)
For j= 0 to 3-i
if a(j)>a(j+1) then 交換a(j) 和a(j+1)的值
其中,I的值為0,1,2,3分別表示第1趟,第2趟,第3趟,第4趟。
師:對,那我們怎樣把兩者結合起來,在趟次變化時,比較次數也隨之發表變化呢?
生:思考
師:提示:通過循環語句輸出幾何圖形的處理方法。
生:可以在剛才的循環外再加一層循環,使i也參與變化,以達到對次數的控制。
師:很好。展示程序:
For I=0 to 3
For j=0 to 3-i
if a(j)>a(j+1) then
t=a(j)
a(j)=a(j+1)
a(j+1)=t
end if
next j
next I
生:小組實踐。
師:巡視指導。
師:現在我們是由前向后比較,那如果由后向前比較該怎么辦呢?請大家在小組內討論,找到解決方案的小組舉手。
生:老師,只要把控制次數的循環語句改一下就行了,改成 for j=4 to i+1 step -1。
師:很好,那我們來試試,看看能不能實現排序功能呢?
生:調試。學生舉手,老師,有錯誤提示,應該再把判斷交換的語句改一下,改成
if a(j)>a(j-1) then
T=a(j)
A(j)=a(j-1)
A(j-1)=t
End if
師:很好,這組同學能根據錯誤提示“下標越界”發現,當前數組中的值應該與它前面的數進行比較。我們給這組的同學來點掌聲。請同學們修改程序實現排序功能。并完成課本P58實踐。
【設計意圖】學生通過操作,自己發現問題所在,進而找到解決問題的方法,加深學生對冒泡排序的理解。
師生同學總結:
冒泡排序的基本概念是:依次比較相鄰的兩個數,將小數放在前面,大數放在后面。即在第一趟:首先比較第1個和第2個數,將小數放前,大數放后。然后比較第2個數和第3個數,將小數放前,大數放后,如此繼續,直至比較最后兩個數,將小數放前,大數放后。至此第一趟結束,將最大的數放到了最后。在第二趟:仍從第一對數開始比較(因為可能由于第2個數和第3個數的交換,使得第1個數不再小于第2個數),將小數放前,大數放后,一直比較到倒數第二個數(倒數第一的位置上已經是最大的),第二趟結束,在倒數第二的位置上得到一個新的最大數(其實在整個數列中是第二大的數)。如此下去,重復以上過程,直至最終完成排序。由于在排序過程中總是小數往前放,大數往后放,相當于氣泡往上升,所以稱作冒泡排序。只要我們遵循一個原則:每一趟的趟數加上該趟的比較次數正好是參加排序數值的個數,那么,這類冒泡排序問題都可以迎刃而解。
八、作業設置
由于有些人使用數組習慣從a(1)開始,如果把數值放在數組a(1),a(2),…a(5)中,那排序的代碼是怎樣的呢?請大家課后思考!
九、板書設計
For i=0 to ______
For j=0 to ______
If a(j)<a(j+1) then
交換
End if
Next j
Next i
十、教學反思
本節采用對冒泡排序的基本方法進行分析,借助學生排隊展示及flash課件,通過偽代碼逐步引出雙循環和冒泡排序的程序實現,這就要求學生的循環語句基礎要好些。另外,由于冒泡排序這部分內容相對比較枯燥,講授時間相對較多,因此,我及時調節課堂氣氛,并讓學生進行小組討論,組與組之間進行比賽,提高學生的參與度,防止學生課內思維疲勞