第一篇:排序程序小結(jié)(冒泡排序、并歸排序、插入排序等)(精)
程序在VC6.0下運(yùn)行測(cè)試通過,包含三個(gè)文件:sort_all.h排序類的定義; sort_real.cpp排序類成員函數(shù)定義;sort_main.h運(yùn)行的主函數(shù)。
包括冒泡排序、并歸排序、插入排序、選擇排序、快速排序、堆排序、Shell排序 ——————sort_all.h文件—————————————————— #include using namespace std;/****************************************/ class sort_all { public: void swap_i(int &a, int &b;void disp_array(int *array, int len;void disp_num(;void sort_maopao(int *array, int len;void sort_quick(int *array, int start, int end;void sort_merge(int * array, int start, int end;void sort_heap(int *array, int len;void sort_select(int *array, int len;void sort_insert(int *array, int len;void sort_shell(int *array, int len;};——————————————————————————————————————
————————sort_real.cpp文件——————————————————————
#include “sort_all.h”
void sort_all::disp_array(int *array, int len { for(int i=0;i { cout << array[i] << “ ”;} cout << endl;} void sort_all::swap_i(int &a, int &b { int temp;temp = a;a = b;b = temp;} void sort_all::disp_num({ cout << “---冒泡排序,輸入1---” << “n”;cout << “---并歸排序,輸入2---” << “n”;cout << “---插入排序,輸入3---” << “n”;cout << “---選擇排序,輸入4---” << “n”;cout << “---快速排序,輸入5---” << “n”;cout << “----堆排序,輸入6----” << “n”;cout << “--Shell排序,輸入7---” << “n”;cout << “-----結(jié)束,輸入0-----” << “n”;
} /**************************************************/ /**************堆排序 ******************************/ /**************************************************/ void heap_adj(int *array, int i, int len { int nTemp;int nChild;for(nTemp = array[i];2*i+1 { nChild = 2*i+1;if(nChild nChild ++;if(nChild < len-1 && array[nChild]>nTemp array[i] = array[nChild];else break;array[nChild] = nTemp;} } void heap_create(int *array, int len { for(int i=len/2;i>=0;i--heap_adj(array,i, len;}
void sort_all::sort_heap(int *array, int len { heap_create(array, len;for(int i=len-1;i>0;i--{ swap_i(array[0], array[i];heap_adj(array, 0, i;} } /*******************************************************/ /******************插入排序*****************************/ /*******************************************************/ void sort_all::sort_insert(int *array, int len { int i,j;int temp;for(i=1;i { temp = array[i];for(j=i;j>0 && array[j-1] > temp;j--array[j] = array[j-1];array[j] = temp;} } /********************************************************/
/*************冒泡排序***********************************/ /********************************************************/ void sort_all::sort_maopao(int *array, int len { int i,j;for(i=0;i { for(j=len-1;j>=i;j--{ if(array[j] > array[j+1] swap_i(array[j],array[j+1];} } } /**********************************************/ /**************并歸排序************************/ /**********************************************/ void merge(int * array, int start, int mid, int end { int len_A = midmid;int *A = new int[len_A];int *B = new int[len_B];int i,j;for(i=0;i
A[i] = array[i +start];for(i=0;i B[i] = array[i + mid+1];i=0;j=0;int temp;int k=start;while(i { if(A[i] > B[j] { temp = A[i];i++;} else { temp = B[j];j++;} array[k++] = temp;} while(i { array[k++] = A[i++];}
while(j { array[k++] = B[j++];} } void sort_all::sort_merge(int * array, int start, int end { if(start == end return;else { int mid =(start+end/2;sort_merge(array, start, mid;sort_merge(array, mid+1, end;merge(array, start, mid, end;} } /********************快速排序******************************/ /**********************************************************/ void sort_all::sort_quick(int *array, int start, int end { int key = array[start];int i = start;int j = end;if(i>=j
return;while(i { while(i j--;array[i] = array[j];while(i = array[i] i++;array[j] = array[i];} array[i] = key;sort_quick(array, start, i-1;sort_quick(array, i+1, end;} /****************************************************/ /****************選擇排序****************************/ /****************************************************/ void sort_all::sort_select(int *array, int len { int i,j;int ntemp;int key;for(i=0;i { key = array[i];
ntemp = i;for(j=i+1;j { if(array[j] < key && array[ntemp] > array[j] ntemp = j;} swap_i(array[i], array[ntemp];} } /*****************************************/ /**************** Shell排序****************/ /*****************************************/ void sort_all::sort_shell(int *array, int len { int step = len;int i;while(step >1 { step =(step+1/2;for(i=0;i { if(array[i+step] < array[i] swap_i(array[i+step], array[i];} }
} ————————————————————————————————————————————————————sort_main.cpp文件————————————————— #include “sort_all.h” int main({ int input[] = {2,4,5,1,5,8,10,-2,4};int len = sizeof(input/sizeof(int;int N;sort_all instance;while(1 { instance.disp_num(;cout << “請(qǐng)輸入: ”;cin >> N;if(N==0 break;cout << “-” << “n”;cout<< “原始數(shù)據(jù):” << “n”;instance.disp_array(input, len;switch(N { case 1: instance.sort_maopao(input, len;cout << “冒泡排序結(jié)果:” << “n”;
break;case 2: instance.sort_merge(input, 0, len-1;cout << “并歸排序結(jié)果:” << “n”;break;case 3: instance.sort_insert(input, len;cout << “插入排序結(jié)果:” << “n”;break;case 4: instance.sort_select(input, len;cout << “選擇排序結(jié)果:” << “n”;break;case 5: instance.sort_quick(input, 0, len-1;cout << “快速排序結(jié)果:” << “n”;break;case 6: instance.sort_heap(input, len;cout << “堆排序結(jié)果:” << “n”;break;case 7: instance.sort_shell(input, len;cout << “Shell排序結(jié)果:” << “n”;default:
break;} instance.disp_array(input, len;cout << “------” << “n”;cout << endl;} return 0;}
第二篇:冒泡排序教案
冒泡排序
信息技術(shù) 呂紅波
教學(xué)內(nèi)容分析
教材是教育科學(xué)出版社《算法與程序設(shè)計(jì)》,內(nèi)容為第三章第四節(jié)第一部分《冒泡法排序算法》。排序算法是使用頻率最高的算法之一,而冒泡排序是其中一種很典型而且相對(duì)簡(jiǎn)單的方法,這部分內(nèi)容重點(diǎn)在于介紹冒泡排序的原理以及如何用程序?qū)崿F(xiàn)冒泡排序算法,要求學(xué)生理解冒泡排序的過程的同時(shí),能夠運(yùn)用冒泡排序算法解決實(shí)際問題。
教學(xué)對(duì)象分析
通過前面的學(xué)習(xí),學(xué)生已經(jīng)了解vb算法設(shè)計(jì)的基本知識(shí),學(xué)會(huì)利用自然語言和流程圖描述解決問題的算法,對(duì)排序中循環(huán)語句以及數(shù)組變量的使用方法都有了一定的基礎(chǔ)。但由于程序設(shè)計(jì)思想比較弱,在實(shí)際生活中往往忽視運(yùn)用排序算法來處理實(shí)際問題,這就要求學(xué)生通過本節(jié)課的學(xué)習(xí),學(xué)會(huì)運(yùn)用冒泡排序算法來處理實(shí)際問題,并為以后學(xué)習(xí)其它排序算法打下基礎(chǔ)。
教學(xué)目標(biāo)
1.知識(shí)與技能:
掌握冒泡排序的原理
理解冒泡排序的主要代碼 2.過程與方法:
能夠有效使用冒泡排序思想設(shè)計(jì)解決簡(jiǎn)單的排序問題 3.情感、態(tài)度與價(jià)值觀:
提升分析問題、發(fā)現(xiàn)規(guī)律的能力 形成對(duì)排序算法探索的強(qiáng)烈愿望
教學(xué)重點(diǎn)、難點(diǎn)
教學(xué)重點(diǎn):冒泡排序的過程和原理
教學(xué)難點(diǎn):冒泡排序主程序代碼的實(shí)現(xiàn)
教學(xué)方法
講授法、活動(dòng)型教學(xué)法、任務(wù)驅(qū)動(dòng)教學(xué)法 教學(xué)過程
1.創(chuàng)設(shè)情景、激發(fā)興趣
教師活動(dòng):出示2011-2012賽季NBA部分球員數(shù)據(jù)統(tǒng)計(jì)表。
提問:想知道誰的得分最高,誰的罰球最好,用什么方法? 學(xué)生活動(dòng):學(xué)生思考問題,給出可能性答案:excel排序和用程序設(shè)計(jì)實(shí)現(xiàn)。
2.圖文并茂、理解過程
教師活動(dòng):運(yùn)用程序設(shè)計(jì)中的冒泡排序算法可以實(shí)現(xiàn)。展示圖片,講解冒泡排序“冒泡”由來。
ppt展示任務(wù):運(yùn)用冒泡排序法將10,2,6,7,4從小到大進(jìn)行排列。
結(jié)合ppt對(duì)冒泡排序?qū)崿F(xiàn)過程進(jìn)行講解。
學(xué)生活動(dòng):結(jié)合教師講解和ppt內(nèi)容,理解冒泡排序原理。教師活動(dòng):播放一段關(guān)于冒泡排序的視頻。
3.結(jié)合過程、書寫代碼
教師活動(dòng):講解冒泡排序主程序部分,書寫偽代碼。學(xué)生活動(dòng):理解主程序。
4.總結(jié)歸納、學(xué)以致用
教師活動(dòng):組織學(xué)生開展活動(dòng):隨機(jī)抽選五位男生、五位女生,按性別分組,用布遮住自己的眼睛,每組隨機(jī)排成一隊(duì),要求隊(duì)伍從左到右由高到矮排列,看哪組所用時(shí)間短。
提示:摸對(duì)方的頭頂和自己比較的方式,結(jié)合冒泡排序來 完成。
歸納總結(jié):什么是冒泡法排序?
在排序過程中,使小的數(shù)就像氣泡一樣逐層上浮,而使大的數(shù)逐個(gè)下沉。
拓展延伸:冒泡排序有不足之處。排序算法包括很多:插入排序、選擇排序、快速排序、希爾排序等。
板書設(shè)計(jì)
冒泡法排序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 學(xué)習(xí)效果評(píng)價(jià)
1.在教學(xué)實(shí)踐過程中對(duì)學(xué)生操作效果和結(jié)論的及時(shí)反饋評(píng)價(jià)。2.完成本節(jié)課學(xué)習(xí)任務(wù)后,學(xué)生根據(jù)教學(xué)目標(biāo)完成自我評(píng)價(jià)。
教學(xué)反思
本節(jié)課內(nèi)容理論性比較強(qiáng),通過多種方式來向?qū)W生呈現(xiàn)冒泡排序的過程,通過類比的方式讓學(xué)生了解冒泡排序,通過一段有創(chuàng)意的舞蹈來進(jìn)一步讓學(xué)生了解冒泡排序的過程,避免了理論知識(shí)的枯燥,防止學(xué)生課內(nèi)思維疲勞,讓學(xué)生樂于去接受。最后通過一個(gè)簡(jiǎn)單的游戲讓學(xué)生學(xué)以致用,來解決實(shí)際問題。通過教師的歸納總結(jié)讓學(xué)生正確的看待冒泡排序算法。
第三篇:冒泡排序說課稿
冒泡排序說課稿
各位評(píng)委大家好,很高興能給我十分鐘的時(shí)間和大家交流。我叫周芮,來自09教技。今天我要說課的課題是《冒泡排序》。該課選自浙教版《算法與程序設(shè)計(jì)》。排序算法是本書中比較精彩但也是相對(duì)較難的部分之一,它的內(nèi)容豐富,形式多樣。而冒泡排序又是相對(duì)簡(jiǎn)單的一種排序方法。它是本章的第一課時(shí),在本章中起著示范作用,所以講好這節(jié)課是教好以后的課的關(guān)鍵。
綜合以上幾點(diǎn),我將本課的教學(xué)目標(biāo)制定如下: 知識(shí)與技能:
掌握冒泡排序的原理;
理解冒泡排序的流程圖
過程與方法:
通過游戲中對(duì)人物財(cái)富的排序,理解冒泡排序的基
本原理和方法;
通過歸納冒泡排序算法來編寫流程圖
情感態(tài)度價(jià)值觀:培養(yǎng)學(xué)生分析問題以及解決日常生活中實(shí)際問題的人能力,發(fā)現(xiàn)規(guī)律的能力。并激發(fā)學(xué)生主動(dòng)學(xué)習(xí)的興趣
基于對(duì)教材的理解,我將本堂課的重點(diǎn)定為掌握冒泡排序的算法,難點(diǎn)為歸納算法,用流程圖表示。
我們現(xiàn)在面對(duì)的學(xué)生是所謂的90后,他們普遍具有創(chuàng)造性,容易接受新事物,善于發(fā)現(xiàn)的特點(diǎn)。他們對(duì)認(rèn)知規(guī)律從感性逐步提升到了理性。而且學(xué)生有個(gè)普遍的特性就是愛玩,這是他們的天性。基于這一特點(diǎn),我將會(huì)用游戲來引發(fā)他們的學(xué)習(xí)興趣。在知識(shí)準(zhǔn)備方面,學(xué)生
先前已經(jīng)學(xué)過了算法的表示方法,三種基本結(jié)構(gòu),熟悉了變量的運(yùn)用,能用算法描述一般問題的解決步驟。
在教法方面,我將選用演示法、任務(wù)驅(qū)動(dòng)法、練習(xí)法。
在學(xué)法方面,主要是聽講法和自主探究學(xué)習(xí)法,通過老師講解以及自己的親身體驗(yàn)來探究算法的原理。
《師說》中提到,“師者,傳到授業(yè)解惑也”,教學(xué)也就是為學(xué)生解決疑惑的。我的教學(xué)過程也就圍繞“惑”這個(gè)字展開,我稱之為“惑之四部曲”。
第一部曲是“遇惑”。我先創(chuàng)設(shè)一個(gè)游戲情境——大富翁,這是一款比較普遍的游戲,容易引起學(xué)生的共鳴,從而引發(fā)學(xué)生的學(xué)習(xí)興趣。利用游戲中的一個(gè)情景——財(cái)富排行榜,來引出教學(xué)內(nèi)容。首先我展示的排行榜上可能只有幾個(gè)人,同學(xué)們能夠很輕易地給出結(jié)果,可是當(dāng)人數(shù)增多的時(shí)候,同學(xué)們就會(huì)覺得比較困難,當(dāng)人數(shù)到達(dá)一定的數(shù)量后同學(xué)們會(huì)覺得這簡(jiǎn)直是不可能完成的任務(wù)。這樣,老師就可以引出學(xué)習(xí)的內(nèi)容——冒泡排序。
這一設(shè)計(jì),我主要考慮到學(xué)生對(duì)數(shù)量少的數(shù)據(jù)能夠比較容易地完成而不是通過考慮“按什么方法完成的”。這樣增加難度后可以讓學(xué)生體會(huì)到算法的好處,從而引起主動(dòng)學(xué)習(xí)的興趣,可以自然引出冒泡排序算法的思想。第二部曲是“析惑”。
為了讓同學(xué)們腦海中模糊的思想變清晰,我準(zhǔn)備了一個(gè)FLASH課件小游戲,內(nèi)容就是大富翁的財(cái)富排行榜。我制定這么一個(gè)規(guī)則:將財(cái)富從少到多排列。可以通過從右往左的順序兩兩進(jìn)行對(duì)比,將較低的人往左排。
通過這樣一個(gè)環(huán)節(jié),可以讓同學(xué)們比較直觀的感受到冒泡算法的思想,是如何進(jìn)行的。第三部曲是“解惑”
首先我會(huì)請(qǐng)同學(xué)用自然語言來描述算法的思想,我進(jìn)行小結(jié)。接著我將繼續(xù)提問如何用流程圖表示。在這里我先會(huì)引入一個(gè)數(shù)組的概念,用板書演示。為了讓同學(xué)更加透徹了解算法,我會(huì)用數(shù)組來演示詳細(xì)的過程。用變量i表示趟值,用j表示帶比較數(shù)組的位置。若d(j) 在課堂快結(jié)束時(shí)我將會(huì)進(jìn)行課堂小結(jié),回顧本堂課的知識(shí)點(diǎn)提問讓同 學(xué)回答算法思想,達(dá)到鞏固的目的。 最后一部曲是“掃惑”。我會(huì)給同學(xué)們布置一個(gè)任務(wù),給出一張成績(jī)單,上面印有一個(gè)同學(xué)的各科的考試成績(jī)。讓同學(xué)們用冒泡排序算法寫出各趟排序結(jié)果并上交。這樣可以及時(shí)檢測(cè)同學(xué)們是否學(xué)會(huì)了。得到及時(shí)的反饋。 總結(jié):因?yàn)檫@堂課相對(duì)而言是比較難的,如何長(zhǎng)時(shí)間吸引學(xué)生的注意力是我要考慮的一個(gè)問題。為此,我進(jìn)行了如下設(shè)計(jì): 1、用游戲引入課堂,逐步加深問題的難度 2、用FLASH課件演示 3、用表格列舉 4、請(qǐng)同學(xué)們補(bǔ)充流程圖 數(shù)據(jù)結(jié)構(gòu)——冒泡排序(第19講,第9章) 一、復(fù)習(xí)回顧 什么是排序:排序是把一個(gè)無序的數(shù)據(jù)元素序列整理成有規(guī)律的按排序關(guān)鍵字遞增(或遞減)排列的有序序列的過程。 /************************************************(已經(jīng)學(xué)過的排序方法有:直接插入排序、希爾排序、直接插入排序:順序的把待排序序列中的各個(gè)記錄按其關(guān)鍵字的大小,插入到已排序的序列的適當(dāng)位置。 希爾排序:(縮小增量排序),不斷把待排序的記錄分成若干個(gè)小組,對(duì)同一組內(nèi)的記錄進(jìn)行排序,在分組時(shí),始終保持當(dāng)前組內(nèi)的記錄個(gè)數(shù)超過前面分組排序時(shí)組內(nèi)的記錄個(gè)數(shù)。) ************************************************/ 二、第一小節(jié)(目標(biāo):理解掌握冒泡思想) 1、給出冒泡排序的定義(25分鐘) 將待排序序列中第一個(gè)記錄的關(guān)鍵字R1.key與第二個(gè)記錄的關(guān)鍵字R2.key作比較,如果R1.key>R2.key,則交換記錄R1和R2在序列中的位置,否則不交換;然后繼續(xù)對(duì)當(dāng)前序列中的第二個(gè)記錄和第三個(gè)記錄作同樣的處理,依此類推,知道序列中倒數(shù)第二個(gè)記錄和最后一個(gè)記錄處理完為止,我們稱這樣的過程為一次冒泡排序。 2、請(qǐng)學(xué)生上臺(tái)做排序練習(xí)(15分鐘做題+10分鐘講解)(鞏固排序思想的掌握) 第一題: 38 5 19 26 49 97 1 66 第一次排序結(jié)果:5 19 26 38 49 1 66 [97] 第二次排序結(jié)果:5 19 26 38 1 49 [66 97] 第三次排序結(jié)果:5 19 26 1 38 [49 66 97] 第四次排序結(jié)果:5 19 1 26 [38 49 66 97] 第五次排序結(jié)果:5 1 19 [26 38 49 66 97] 第六次排序結(jié)果:1 5 [19 26 38 49 66 97] 第七次排序結(jié)果:1 [5 19 26 38 49 66 97] 最后結(jié)果序列: 1 5 19 26 38 49 66 97 第二題: 8 7 6 5 4 3 2 1 數(shù)據(jù)結(jié)構(gòu)——冒泡排序(第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] 最后結(jié)果序列: 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] 最后結(jié)果序列: 1 2 3 4 5 6 7 8] 從練習(xí)題中引出:一次冒泡排序的結(jié)果:使關(guān)鍵字最大的記錄排在了序列的最后一個(gè)位置上。(這很重要,要強(qiáng)調(diào)) 比較后兩題的題目區(qū)別和排序過程區(qū)別,作為課間思考題。(第二題是一組逆序數(shù)據(jù),每一個(gè)排序都進(jìn)行了數(shù)據(jù)交換,共進(jìn)行了8-1=7次冒泡;第三題是一組正序數(shù)據(jù),進(jìn)行完一次排序后就發(fā)現(xiàn),沒有任何數(shù)據(jù)交換發(fā)生,后面進(jìn)行的第二次到第七次冒泡的過程完全一樣。) 三、第二小節(jié) 3、冒泡排序終止的條件(20分鐘) 課堂思考題:考慮任何一組序列最多進(jìn)行多少次冒泡排序就可保證順序一定已經(jīng)排好了。 思考:如果序列初始順序是逆序,需要進(jìn)行多少次排序(要記住,數(shù)據(jù)結(jié)構(gòu)——冒泡排序(第19講,第9章) 每次冒泡排序的結(jié)果:可以保證最大的記錄在最后一個(gè)位置上)。如果序列初始順序是正序,需要進(jìn)行多少次排序就可以保證數(shù)據(jù)序列順序。如何使排序過程適可而止?既排好序又不多余進(jìn)行? 當(dāng)計(jì)算機(jī)對(duì)一組數(shù)據(jù)進(jìn)行排序之前,并不知道該組數(shù)據(jù)是什么順序,因此,必須要進(jìn)行至少一次的比較和排序,當(dāng)某一比較和排序進(jìn)行完之后發(fā)現(xiàn)沒有任何數(shù)據(jù)交換發(fā)生,證明任何相鄰的兩數(shù)都符合目標(biāo)順序要求,因此,也不必再進(jìn)行下一下比較排序了。 結(jié)論:當(dāng)進(jìn)行某次冒泡排序時(shí),若沒有任何兩個(gè)記錄交換位置,則表明序列已排好,此時(shí)排序可結(jié)束。 4、用文字(偽碼)描述冒泡排序算法(15分鐘)思考方法: 首先是對(duì)數(shù)組的相鄰的兩數(shù)比較,根據(jù)比較結(jié)果確定是否交換位置;這種比較進(jìn)行的次數(shù)比數(shù)據(jù)列中數(shù)據(jù)個(gè)數(shù)少1; (此兩步完成了一次冒泡排序) 對(duì)一個(gè)序列來說,共進(jìn)行多少次冒泡排序呢?最多和上面第二步的比較次數(shù)一樣,但也可提前結(jié)束,只要在某一遍冒泡中沒有發(fā)生數(shù)據(jù)交換即可。如何確實(shí)是否發(fā)生數(shù)據(jù)交換,在程序中,可以考慮設(shè)置一個(gè)標(biāo)志位,當(dāng)發(fā)生數(shù)據(jù)交換時(shí),更改標(biāo)志位,每次重新進(jìn)行冒泡排序之前可以檢查標(biāo)志位,如果沒有發(fā)生改變,則可證明上一次冒泡已經(jīng)沒有數(shù)據(jù)交換發(fā)生,也就是說數(shù)據(jù)序列已經(jīng)排好,可以停止進(jìn)行冒泡排序。 冒泡算法函數(shù) { 設(shè)置標(biāo)志位; //以下循環(huán)用來控制冒泡排序進(jìn)行的次數(shù) 數(shù)據(jù)結(jié)構(gòu)——冒泡排序(第19講,第9章) for循環(huán)(對(duì)n個(gè)數(shù)據(jù)的序列進(jìn)行n-1次冒泡,但是如果沒有交換發(fā)生則跳出該循環(huán)){ //以下循環(huán)用來對(duì)該數(shù)據(jù)序列進(jìn)行一次冒泡排序 for(單次冒泡排序需要進(jìn)行n-1次){ 比較相鄰兩數(shù)的大小; if(前大后小){ 交換 } else //前小后大 { 位置不變 } } } } 5、回顧總結(jié)冒泡排序的思想(10分鐘)本節(jié)課: 1.首先回顧了什么是排序; 2.然后介紹了冒泡排序的思想;(每次冒一個(gè)泡泡,把最大的冒到最后)3.我們通過三道練習(xí)題對(duì)一組無序數(shù)據(jù)進(jìn)行了排序; 4.通過練習(xí)題我們看出來,數(shù)據(jù)初始序列越接近目標(biāo)序列,冒泡的次數(shù)越少;因此我們總結(jié)出了冒泡排序最多進(jìn)行的次數(shù)和終止的條件; 5.最后,我們根據(jù)冒泡排序的思想用文字描述了冒泡函數(shù)的構(gòu)成方法; 四、課后作業(yè) 1、用冒泡排序法對(duì)數(shù)字序列進(jìn)行排序(要寫出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 數(shù)據(jù)結(jié)構(gòu)——冒泡排序(第19講,第9章) 10 37 48 55 60 84 90 2、用C語言描述冒泡排序算法。 Void BubbleSort(elemtype x[],int n)//傳入序列和序列數(shù)字個(gè)數(shù) { int i,j,flag=1;elemtype temp;for(i=1;i /*選擇排序*/ public class SelectSort2 { public static void sort(int[] tempArr){ for(int i =0;i { /* 當(dāng)初錯(cuò)誤認(rèn)為此處與冒泡排序極為相像,甚至覺得選擇排序與冒泡排序毫無差別,其實(shí)相反,冒泡循環(huán)意味著每一次 循環(huán)都會(huì)將相鄰的兩個(gè)數(shù)比較這樣每次都會(huì)排出數(shù)組中最大或最小的數(shù)。然后再次執(zhí)行外層循環(huán),再繼續(xù)進(jìn)入內(nèi)層循環(huán) 再依次進(jìn)行比較。 選擇排序則是,第一次循環(huán):咬定第一個(gè)數(shù)角標(biāo)i=0的元素,依次與后面的元素比較,將最小或最大的數(shù)排出來,再進(jìn)入 外層的第二次循環(huán),并且此時(shí)咬定的數(shù)為角標(biāo)為1的元素,但因?yàn)橹耙褜⑷珨?shù)組中最小或最大的數(shù)排出所以沒有必要再 與數(shù)組中角標(biāo)為零得數(shù)比較 而是通過 j=i+1 將待比較的角標(biāo)變成[ 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);} }第四篇:冒泡排序法教案
第五篇:冒泡排序及選擇排序Java實(shí)現(xiàn)心得