楊艷秋


摘 要 本文以“冒泡排序算法”內容為例,通過提出問題、分析問題、解決問題、發現解決方案不足、優化解決方案、能力擴展的教學設計思路,循序漸進的進行教學。大大激發學生學習興趣,使學生更好的掌握冒泡排序算法的原理和算法設計,培養學生發現問題、分析問題和解決問題的能力,取得良好的教學效果。
關鍵詞 冒泡排序 啟發式 教學方法
中圖分類號:TP311文獻標識碼:A
0引言
啟發式教學是根據教學目的、內容、學生的知識水平和知識規律,運用各種教學手段,采用啟發誘導辦法傳授知識、培養能力,是學生積極主動地學習的一種教學方法。
傳統的教學方法中,一般都是老師先講述一遍冒泡排序的思想,然后列出排序算法,并解釋冒泡排序是如何實現的。這種教學方式比較枯燥,教學效果不好,學生甚至會產生厭學情緒。那么,如何讓學生即掌握冒泡排序的基本原理和算法設計,又能激發學生對算法設計的興趣呢?下文將采用啟發式、任務驅動式以及演示法等教學法,教學設計注重原理與實踐相結合。通過講解、提問、討論,總結等形式將問題引向深入,充分調動學生的學習積極性,發揮學生的主體作用,讓他們在愉快地氛圍中接受新的知識和技能。
1教學目標
知識目標:掌握冒泡排序的原理及冒泡排序的算法設計
能力目標:利用C語言實現冒泡排序的算法及算法優化
態度目標:培養學生邏輯思維和主動分析解決問題的能力
2教學重難點
教學重點:冒泡排序算法的原理。
教學難點:冒泡排序算法的設計和算法優化。
3教學過程設計
3.1實例引入,提出問題,激發興趣
通過集合排隊實例進行問題引入。
設計目的:通過生活實例進行問題引入,吸引學生注意力,然后提出本節課要解決的問題。
3.2分析問題,重在啟發
動畫演示5個卡通人物按身高由矮到高排序的過程。
設計目的:通過動畫演示,讓學生清楚的了解冒泡排序的具體過程,提問題啟發、引導學生分析問題并總結冒泡排序原理:將相鄰的兩個數進行比較,若前面的數比后面的數大就交換兩數,否則不交換;如此下去直至最終完成排序。
3.3解決問題,培養能力
學生掌握冒泡排序原理后,開始對算法進行設計。將五個卡通人物的身高抽象為數字,利用數組int a[]={190,180,185,195,175}對數據進行存儲,然后的排序過程詳細講解和算法設計。
(1)先采用ppt動畫演示數據變換、然后分析設計本輪算法實現。
(2)分析歸納。
將每輪代碼羅列出來。讓學生們觀察思考。分析總結得到5個數排序算法代碼。
for(i=0;i<4;i++)//外循環,比較輪數
for(j=0;j<4-i;j++)//內循環,每輪比較次數
if(a[j]>a[j+1])//把大的數往右排,已拍好序的數據不再參與判斷
{t=a[j];a[j]=a[j+1];a[j+1]=t;}
(3)啟發擴展。
假設有n個數參與排序,教師啟發引導學員分析,得到n個數的冒泡排序算法代碼。引導學生利用函數調用的方式實現,并調試、運行程序。源程序如下:
#include
int sortFuntion(int a[],int n)//實現冒泡排序的函數
{int i,j,t;
for(j=0;j {for(i=0;i if(a[i]>a[i+1]){t=a[i];a[i]=a[i+1];a[i+1]=t;} //比較、交換 for(i=0;i printf("\nloop(%d):=====\n",j);//每輪之間加上換行和分隔線 } return 0; } void main() {int m; int a[]={190,180,185,195,175}; int length=sizeof(a)/sizeof(int); m=sortFuntion(a,length);//調用冒泡排序函數 } 設計目的:了解冒泡排序原理后,再由淺入深的對原理講解、算法設計、分析歸納,并驗證算法的正確性,使教學更加科學嚴謹。 3.4發現解決方案的不足并優化 (1)在源程序中將原始數組改為升序序列。設計目的:修改程序,讓學生預計運行結果,通過運行結果發現算法的不足處,促使學員積極思考,發現問題并指出問題所在,檢驗學員對冒泡算法的理解情況。 (2)提出程序優化方案。提出通過設置開關來flag記錄某一次內循環是否有過元素交換的解決方案。優化后的冒泡排序程序代碼如下: for(j=0;j {flag=0;//每輪排序先將flag賦值為0 for(i=0;i if(a[i]>a[i+1]) {t=a[i];a[i]=a[i+1];a[i+1]=t; flag=1;//if判斷條件為真就會發生位置移動所以將flag賦值為1 } If(flag==0)break;//在某一輪的排序中數據沒交換,程序結束 } (3)編譯運行優化后的程序。分析冒泡排序算法改進前后的時間復雜度,修改后的算法是否達到優化目的。 設計目的:讓學生發現問題,找出解決方案并驗證,讓學生更深刻的理解冒泡排序算法,培養學生發現問題、解決問題的能力。 3.5能力擴展 思考提問如何實現n個數據降序輸出? 設計目的:調試程序實現優化,舉一反三將升序變為降序。 4總結 本文以冒泡排序算法的教學設計為例,采用啟發式、任務驅動式以及演示法等教學法,形象生動的向學生展示冒泡排序的基本思想和算法設計。通過啟發式教學,激發學生學習熱情,提高學生發現問題和解決問題的能力。因此采用這種教學方法有效提高了教學效果。 參考文獻 [1] 武青海,彭新苗.啟發式教學在《C語言程序設計》實驗教學中的應用[J].吉林農業科技學院學報,2014(03). [2] 程妮,C語言中冒泡排序算法的教學設計與分析[J].現代計算機(專業版),2016(10). [3] 宋美英,.基于C語言的冒泡排序算法探討[J].現代計算機(專業版),2011(29).