第一篇:冒泡排序教案
冒泡排序
信息技術 呂紅波
教學內容分析
教材是教育科學出版社《算法與程序設計》,內容為第三章第四節第一部分《冒泡法排序算法》。排序算法是使用頻率最高的算法之一,而冒泡排序是其中一種很典型而且相對簡單的方法,這部分內容重點在于介紹冒泡排序的原理以及如何用程序實現冒泡排序算法,要求學生理解冒泡排序的過程的同時,能夠運用冒泡排序算法解決實際問題。
教學對象分析
通過前面的學習,學生已經了解vb算法設計的基本知識,學會利用自然語言和流程圖描述解決問題的算法,對排序中循環語句以及數組變量的使用方法都有了一定的基礎。但由于程序設計思想比較弱,在實際生活中往往忽視運用排序算法來處理實際問題,這就要求學生通過本節課的學習,學會運用冒泡排序算法來處理實際問題,并為以后學習其它排序算法打下基礎。
教學目標
1.知識與技能:
掌握冒泡排序的原理
理解冒泡排序的主要代碼 2.過程與方法:
能夠有效使用冒泡排序思想設計解決簡單的排序問題 3.情感、態度與價值觀:
提升分析問題、發現規律的能力 形成對排序算法探索的強烈愿望
教學重點、難點
教學重點:冒泡排序的過程和原理
教學難點:冒泡排序主程序代碼的實現
教學方法
講授法、活動型教學法、任務驅動教學法 教學過程
1.創設情景、激發興趣
教師活動:出示2011-2012賽季NBA部分球員數據統計表。
提問:想知道誰的得分最高,誰的罰球最好,用什么方法? 學生活動:學生思考問題,給出可能性答案:excel排序和用程序設計實現。
2.圖文并茂、理解過程
教師活動:運用程序設計中的冒泡排序算法可以實現。展示圖片,講解冒泡排序“冒泡”由來。
ppt展示任務:運用冒泡排序法將10,2,6,7,4從小到大進行排列。
結合ppt對冒泡排序實現過程進行講解。
學生活動:結合教師講解和ppt內容,理解冒泡排序原理。教師活動:播放一段關于冒泡排序的視頻。
3.結合過程、書寫代碼
教師活動:講解冒泡排序主程序部分,書寫偽代碼。學生活動:理解主程序。
4.總結歸納、學以致用
教師活動:組織學生開展活動:隨機抽選五位男生、五位女生,按性別分組,用布遮住自己的眼睛,每組隨機排成一隊,要求隊伍從左到右由高到矮排列,看哪組所用時間短。
提示:摸對方的頭頂和自己比較的方式,結合冒泡排序來 完成。
歸納總結:什么是冒泡法排序?
在排序過程中,使小的數就像氣泡一樣逐層上浮,而使大的數逐個下沉。
拓展延伸:冒泡排序有不足之處。排序算法包括很多:插入排序、選擇排序、快速排序、希爾排序等。
板書設計
冒泡法排序Visual Basic偽代碼: For i=1 to 4
For j= 1 TO 5-i
If a(j)>a(j+1)THEN
交換a(j)和a(j+1)的值
End if
Next j Next i 學習效果評價
1.在教學實踐過程中對學生操作效果和結論的及時反饋評價。2.完成本節課學習任務后,學生根據教學目標完成自我評價。
教學反思
本節課內容理論性比較強,通過多種方式來向學生呈現冒泡排序的過程,通過類比的方式讓學生了解冒泡排序,通過一段有創意的舞蹈來進一步讓學生了解冒泡排序的過程,避免了理論知識的枯燥,防止學生課內思維疲勞,讓學生樂于去接受。最后通過一個簡單的游戲讓學生學以致用,來解決實際問題。通過教師的歸納總結讓學生正確的看待冒泡排序算法。
第二篇:冒泡排序法教案
數據結構——冒泡排序(第19講,第9章)
一、復習回顧
什么是排序:排序是把一個無序的數據元素序列整理成有規律的按排序關鍵字遞增(或遞減)排列的有序序列的過程。
/************************************************(已經學過的排序方法有:直接插入排序、希爾排序、直接插入排序:順序的把待排序序列中的各個記錄按其關鍵字的大小,插入到已排序的序列的適當位置。
希爾排序:(縮小增量排序),不斷把待排序的記錄分成若干個小組,對同一組內的記錄進行排序,在分組時,始終保持當前組內的記錄個數超過前面分組排序時組內的記錄個數。)
************************************************/
二、第一小節(目標:理解掌握冒泡思想)
1、給出冒泡排序的定義(25分鐘)
將待排序序列中第一個記錄的關鍵字R1.key與第二個記錄的關鍵字R2.key作比較,如果R1.key>R2.key,則交換記錄R1和R2在序列中的位置,否則不交換;然后繼續對當前序列中的第二個記錄和第三個記錄作同樣的處理,依此類推,知道序列中倒數第二個記錄和最后一個記錄處理完為止,我們稱這樣的過程為一次冒泡排序。
2、請學生上臺做排序練習(15分鐘做題+10分鐘講解)(鞏固排序思想的掌握)
第一題: 38 5 19 26 49 97 1 66 第一次排序結果:5 19 26 38 49 1 66 [97] 第二次排序結果:5 19 26 38 1 49 [66 97] 第三次排序結果:5 19 26 1 38 [49 66 97] 第四次排序結果:5 19 1 26 [38 49 66 97] 第五次排序結果:5 1 19 [26 38 49 66 97] 第六次排序結果:1 5 [19 26 38 49 66 97] 第七次排序結果:1 [5 19 26 38 49 66 97] 最后結果序列: 1 5 19 26 38 49 66 97
第二題: 8 7 6 5 4 3 2 1
數據結構——冒泡排序(第19講,第9章)
答 第一次排序: 7 6 5 4 3 2 1 [8] 第二次排序: 6 5 4 3 2 1 [7 8] 第三次排序: 5 4 3 2 1 [6 7 8] 第四次排序: 4 3 2 1 [5 6 7 8] 第五次排序: 3 2 1 [4 5 6 7 8] 第六次排序: 2 1 [3 4 5 6 7 8] 第七次排序: 1 [2 3 4 5 6 7 8] 最后結果序列: 1 2 3 4 5 6 7 8
第二題: 1 2 3 4 5 6 7 8 第一次排序: 1 2 3 4 5 6 7 [8] 第二次排序: 1 2 3 4 5 6 [7 8] 第三次排序: 1 2 3 4 5 [6 7 8] 第四次排序: 1 2 3 4 [5 6 7 8] 第五次排序: 1 2 3 [4 5 6 7 8] 第六次排序: 1 2 [3 4 5 6 7 8] 第七次排序: 1 [2 3 4 5 6 7 8] 最后結果序列: 1 2 3 4 5 6 7 8]
從練習題中引出:一次冒泡排序的結果:使關鍵字最大的記錄排在了序列的最后一個位置上。(這很重要,要強調)
比較后兩題的題目區別和排序過程區別,作為課間思考題。(第二題是一組逆序數據,每一個排序都進行了數據交換,共進行了8-1=7次冒泡;第三題是一組正序數據,進行完一次排序后就發現,沒有任何數據交換發生,后面進行的第二次到第七次冒泡的過程完全一樣。)
三、第二小節
3、冒泡排序終止的條件(20分鐘)
課堂思考題:考慮任何一組序列最多進行多少次冒泡排序就可保證順序一定已經排好了。
思考:如果序列初始順序是逆序,需要進行多少次排序(要記住,數據結構——冒泡排序(第19講,第9章)
每次冒泡排序的結果:可以保證最大的記錄在最后一個位置上)。如果序列初始順序是正序,需要進行多少次排序就可以保證數據序列順序。如何使排序過程適可而止?既排好序又不多余進行?
當計算機對一組數據進行排序之前,并不知道該組數據是什么順序,因此,必須要進行至少一次的比較和排序,當某一比較和排序進行完之后發現沒有任何數據交換發生,證明任何相鄰的兩數都符合目標順序要求,因此,也不必再進行下一下比較排序了。
結論:當進行某次冒泡排序時,若沒有任何兩個記錄交換位置,則表明序列已排好,此時排序可結束。
4、用文字(偽碼)描述冒泡排序算法(15分鐘)思考方法:
首先是對數組的相鄰的兩數比較,根據比較結果確定是否交換位置;這種比較進行的次數比數據列中數據個數少1;
(此兩步完成了一次冒泡排序)
對一個序列來說,共進行多少次冒泡排序呢?最多和上面第二步的比較次數一樣,但也可提前結束,只要在某一遍冒泡中沒有發生數據交換即可。如何確實是否發生數據交換,在程序中,可以考慮設置一個標志位,當發生數據交換時,更改標志位,每次重新進行冒泡排序之前可以檢查標志位,如果沒有發生改變,則可證明上一次冒泡已經沒有數據交換發生,也就是說數據序列已經排好,可以停止進行冒泡排序。
冒泡算法函數 { 設置標志位;
//以下循環用來控制冒泡排序進行的次數
數據結構——冒泡排序(第19講,第9章)
for循環(對n個數據的序列進行n-1次冒泡,但是如果沒有交換發生則跳出該循環){ //以下循環用來對該數據序列進行一次冒泡排序 for(單次冒泡排序需要進行n-1次){ 比較相鄰兩數的大小;
if(前大后小){ 交換 } else //前小后大 {
位置不變 } } } }
5、回顧總結冒泡排序的思想(10分鐘)本節課:
1.首先回顧了什么是排序;
2.然后介紹了冒泡排序的思想;(每次冒一個泡泡,把最大的冒到最后)3.我們通過三道練習題對一組無序數據進行了排序;
4.通過練習題我們看出來,數據初始序列越接近目標序列,冒泡的次數越少;因此我們總結出了冒泡排序最多進行的次數和終止的條件; 5.最后,我們根據冒泡排序的思想用文字描述了冒泡函數的構成方法;
四、課后作業
1、用冒泡排序法對數字序列進行排序(要寫出6次排序步驟)
55 48 37 10 90 84 答 55 48 37 10 60 84 90 48 37 10 55 60 84 90 37 10 48 55 60 84 90 10 37 48 55 60 84 90
數據結構——冒泡排序(第19講,第9章)
10 37 48 55 60 84 90
2、用C語言描述冒泡排序算法。
Void BubbleSort(elemtype x[],int n)//傳入序列和序列數字個數 {
int i,j,flag=1;elemtype
temp;for(i=1;i
第三篇:冒泡排序說課稿
冒泡排序說課稿
各位評委大家好,很高興能給我十分鐘的時間和大家交流。我叫周芮,來自09教技。今天我要說課的課題是《冒泡排序》。該課選自浙教版《算法與程序設計》。排序算法是本書中比較精彩但也是相對較難的部分之一,它的內容豐富,形式多樣。而冒泡排序又是相對簡單的一種排序方法。它是本章的第一課時,在本章中起著示范作用,所以講好這節課是教好以后的課的關鍵。
綜合以上幾點,我將本課的教學目標制定如下: 知識與技能:
掌握冒泡排序的原理;
理解冒泡排序的流程圖
過程與方法:
通過游戲中對人物財富的排序,理解冒泡排序的基
本原理和方法;
通過歸納冒泡排序算法來編寫流程圖
情感態度價值觀:培養學生分析問題以及解決日常生活中實際問題的人能力,發現規律的能力。并激發學生主動學習的興趣
基于對教材的理解,我將本堂課的重點定為掌握冒泡排序的算法,難點為歸納算法,用流程圖表示。
我們現在面對的學生是所謂的90后,他們普遍具有創造性,容易接受新事物,善于發現的特點。他們對認知規律從感性逐步提升到了理性。而且學生有個普遍的特性就是愛玩,這是他們的天性。基于這一特點,我將會用游戲來引發他們的學習興趣。在知識準備方面,學生
先前已經學過了算法的表示方法,三種基本結構,熟悉了變量的運用,能用算法描述一般問題的解決步驟。
在教法方面,我將選用演示法、任務驅動法、練習法。
在學法方面,主要是聽講法和自主探究學習法,通過老師講解以及自己的親身體驗來探究算法的原理。
《師說》中提到,“師者,傳到授業解惑也”,教學也就是為學生解決疑惑的。我的教學過程也就圍繞“惑”這個字展開,我稱之為“惑之四部曲”。
第一部曲是“遇惑”。我先創設一個游戲情境——大富翁,這是一款比較普遍的游戲,容易引起學生的共鳴,從而引發學生的學習興趣。利用游戲中的一個情景——財富排行榜,來引出教學內容。首先我展示的排行榜上可能只有幾個人,同學們能夠很輕易地給出結果,可是當人數增多的時候,同學們就會覺得比較困難,當人數到達一定的數量后同學們會覺得這簡直是不可能完成的任務。這樣,老師就可以引出學習的內容——冒泡排序。
這一設計,我主要考慮到學生對數量少的數據能夠比較容易地完成而不是通過考慮“按什么方法完成的”。這樣增加難度后可以讓學生體會到算法的好處,從而引起主動學習的興趣,可以自然引出冒泡排序算法的思想。第二部曲是“析惑”。
為了讓同學們腦海中模糊的思想變清晰,我準備了一個FLASH課件小游戲,內容就是大富翁的財富排行榜。我制定這么一個規則:將財富從少到多排列。可以通過從右往左的順序兩兩進行對比,將較低的人往左排。
通過這樣一個環節,可以讓同學們比較直觀的感受到冒泡算法的思想,是如何進行的。第三部曲是“解惑”
首先我會請同學用自然語言來描述算法的思想,我進行小結。接著我將繼續提問如何用流程圖表示。在這里我先會引入一個數組的概念,用板書演示。為了讓同學更加透徹了解算法,我會用數組來演示詳細的過程。用變量i表示趟值,用j表示帶比較數組的位置。若d(j) 在課堂快結束時我將會進行課堂小結,回顧本堂課的知識點提問讓同 學回答算法思想,達到鞏固的目的。 最后一部曲是“掃惑”。我會給同學們布置一個任務,給出一張成績單,上面印有一個同學的各科的考試成績。讓同學們用冒泡排序算法寫出各趟排序結果并上交。這樣可以及時檢測同學們是否學會了。得到及時的反饋。 總結:因為這堂課相對而言是比較難的,如何長時間吸引學生的注意力是我要考慮的一個問題。為此,我進行了如下設計: 1、用游戲引入課堂,逐步加深問題的難度 2、用FLASH課件演示 3、用表格列舉 4、請同學們補充流程圖 /*選擇排序*/ public class SelectSort2 { public static void sort(int[] tempArr){ for(int i =0;i { /* 當初錯誤認為此處與冒泡排序極為相像,甚至覺得選擇排序與冒泡排序毫無差別,其實相反,冒泡循環意味著每一次 循環都會將相鄰的兩個數比較這樣每次都會排出數組中最大或最小的數。然后再次執行外層循環,再繼續進入內層循環 再依次進行比較。 選擇排序則是,第一次循環:咬定第一個數角標i=0的元素,依次與后面的元素比較,將最小或最大的數排出來,再進入 外層的第二次循環,并且此時咬定的數為角標為1的元素,但因為之前已將全數組中最小或最大的數排出所以沒有必要再 與數組中角標為零得數比較 而是通過 j=i+1 將待比較的角標變成[ 2、3、...、tempArr.length)。 */ for(int j =i+1;j { if(tempArr[i]>tempArr[j]) { int temp = tempArr[i]; tempArr[i] = tempArr[j]; tempArr[j] = temp; } } } } public static void arrPrint(int[] tempArr){ System.out.print(“[”); for(int i = 0;i { if(i!= tempArr.length-1) { System.out.print(tempArr[i]+“,”); } else { System.out.println(tempArr[i]+“]”); } } } public static void main(String args[]){ int[] arr = new int[]{10,2,-7,8,1,12,6,7,9,3};arrPrint(arr);sort(arr);arrPrint(arr);} } /*冒泡排序*/ public class MpSort2 { public static void sort(int[] tempArr){ for(int i = 0;i { for(int j = 0;j { if(tempArr[j]>tempArr[j+1]) { int temp = tempArr[j]; tempArr[j] = tempArr[j+1]; tempArr[j+1] = temp; } } } } public static void arrPrint(int[] tempArr){ System.out.print(“[”); for(int i = 0;i { if(i!= tempArr.length-1) { System.out.print(tempArr[i]+“,”); } else { System.out.println(tempArr[i]+“]”); } } } public static void main(String[] args){ int[] arr = new int[]{10,2,-7,8,1,12,6,7,9,3}; arrPrint(arr); sort(arr); arrPrint(arr);} } C語言程序設計冒泡排序教學案例 永川職業教育中心 楊進 【案例背景】 排序是計算機學科中一項復雜而重要的技術,在各種軟件中使用頻率都很高,因此專家們研究了各種排序算法。在中職類設計課程教學中,常以冒泡排序來講解排序的原理,它簡單,但過程繁瑣,傳統教學很難激發學生興趣,學生不易理解,也很難編寫掌握冒泡排序。因此,如何合理設計教學過程,讓學生掌握冒泡排序的思想和編程方法,又能發散思維,擴充知識,進而激發學生對編程課程的興趣,是一個關鍵問題。 1、學情分析 學生已學習了程序設計的三種結構,學習使用了數組。但在學習排序算法的過程中學生可能會對數組變量的變化在理解上存在一定困難,在排序算法中,對雙重循環內外層的作用及有關循環參數的設置可能會產生一些不合理或是錯誤,需要通過實踐的體驗進行強化使用規范。 2、教學目標 知識目標:掌握冒泡排序的原理;能結合冒泡排序的原理看懂冒泡排序的主要代碼;理解冒泡排序的流程圖; 能力目標:學會使用冒泡排序思想設計解決簡單排序問題的算法;進一步理解程序設計的基本方法,進一步體會算法與程序實現的關系; 情感目標:培養學生分析問題、發現規律的能力,激發學生學習熱情;培養良好的讀程習慣; 3、教學重點、難點 重點:冒泡排序算法的基本思想,雙重循環應用 難點:雙重循環程序的解讀,冒泡排序算法實現后對程序的理解 4、教學策略與手段 以循序漸進、層層深入為教學的指導方針,采用講解法、演示法、討論合作、分析歸納法引導學生參與思考,由特殊到一般,有效地突出重點突破難點,逐步深化對冒泡算法、循環思想和執行過程的理解。 1 5、課前準備 PPT課件、冒泡排序的視頻文件。【案例描述】 師:在前面的學習中,我們學過了用EXCEL進行一些簡單的數據處理方法,請同學們說說看你是怎么對同學的成績排次序的? 生:先選好數后,點排序就行了。 師:是的。只要用EXCEL的排序功能就可以了,點點鼠標就能完成。在前面的學習中,我們已經解開了很多單擊鼠標就可以完成某一個任務的秘密,今天我們就來探訪一下排序的秘密。 師:先讓我們來做個舞蹈視頻,同時要求同學們談談看后的自己的想法。并要請幾位同學模擬示范。 這段真人編排的排序算法的舞蹈視頻,非常生動有趣,能充分吸引學生的眼球,極大激發了學生的興趣。 播放完畢,老師提問:請同學們說說你們看到了什么? 生:議論并說自己的想法。(冒泡排序的過程) 由于視頻播放相對較快,為了讓學生更好理解與參與,老師還根據具體情況請了四位涌躍分子來作下一個游戲。 請四位同學從前到后坐好并拿好老師給你們的數字,然后從后面開始兩個兩個比較你們手中的數,如果后面的同學數小的話就和前面的同學換一下座位,直到拿到最小數的同學坐在第一個位子為止。 現在開始,請其他同學注意觀察。請同學們說說你們看到了什么? 生:議論并說自己的想法 師:我聽到了同學們的發言了,你們都看到了最小數已經在最前面了,并且是經過了3次的比較。想一想,如果要讓拿第二小的數的同學坐上第二個座位,還要進行幾次的比較呢?(注意只能從后開始兩兩比較)請拿數的同學演示一下。幾次? 生:兩次 師:對了,是兩次,比第一次少了一次。請四位同學回到座位。剛才我們通過四位 2 同學的演示其實給我們展示了一種數據排序的方法---冒泡法。那么什么是冒泡排序法呢? 冒泡排序法:是指把n個要排序的數看成一垂直列,從最下面的數開始兩兩比較相鄰的兩個數,把小的數向上換,經過n-1次處理以達到排序目的的一種排序方法。(課件展示) 分析總結學生的演示:(課件展示)第1次冒泡排序時 j 從 4 開始到2: 第2次冒泡排序時 j 從 4 開始到3: 第3次冒泡排序時 j 從 4 開始到4 如果用偽代碼可表示為: 第1次冒泡排序時 j 從 4 開始到2: for(j=4;j>=2 ,j--)if(d[j] 3 for(j=4;j>=3 ,j--)if(d[j] 問:如果我們用一個變i(值分別為1,2,3)來記錄冒泡的次數,請問能否將上述的三次代碼合并成一段通用的代碼呢? 生:能(學生講偽代碼)for(j= 4,j>=i+1,j--)if(d[j] 歸納分析引入核心代碼: 當i=1到3時:(課件展示)for(j= 4;j>=i+1;j--)if(d[j] 那么,我們用我們學過的循環語句就可以把某一次的比較表示為:(課件展示)for(j= 4;j>=i+1;j--)if(d[j] 生:思考 師:其實,我們可以在剛才的循環外再加一層循環,使i也參與變化,以達到對次數的控制(課件展示) for(i=1;i<4;i++)for(j=4;j>= i+1;j--)if(d[j] 剛才我們已經講解了4個數冒泡排序的代碼,那么有n個數呢?(課件展示)for(i=1;i 4 for(j=n;j>= i+1;j--)if(d[j] 分析冒泡排序的源程序(用tc編輯器演示分析)為了進一步檢驗學生的情況,老師作了問題延伸: 編寫一個評分系統的代碼段:有10個評委,最后得分為去掉一個最高分與一個最低分后的平均分。(提示:排序后要將最小和最大的數去除,再累加其余各數并除以8)。 【案例反思】 1、本課時采用通過對冒泡排序的基本方法進行分析,利用視頻、游戲等多種教學手段,采用正向講解算法思想,總結規律,歸納算法等方法,一方面使學生順利從排序的思想過渡到偽代碼并到代碼的書寫,逐步引出雙循環和冒泡排序的程序實現,另一方面培養學生觀察算法,分析算法和使用算法的雙向思維意識和發散思維能力,提高學生自覺能力和獨立思考能力,體現了在課程教學中培養學生綜合素質的教育思想。 2、老師要注意講授時間,要能及時調節課堂氣氛,防止學生課內思維疲勞。 5第四篇:冒泡排序及選擇排序Java實現心得
第五篇:C語言程序設計冒泡排序教學案例 楊進