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