數(shù)據(jù)結構課程設計排序算法演示系統(tǒng)_第1頁
數(shù)據(jù)結構課程設計排序算法演示系統(tǒng)_第2頁
數(shù)據(jù)結構課程設計排序算法演示系統(tǒng)_第3頁
數(shù)據(jù)結構課程設計排序算法演示系統(tǒng)_第4頁
數(shù)據(jù)結構課程設計排序算法演示系統(tǒng)_第5頁
已閱讀5頁,還剩29頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、各專業(yè)全套優(yōu)秀畢業(yè)設計圖紙計算機學院數(shù)據(jù)結構課程設計題 目:數(shù)據(jù)結構排序算法演示系統(tǒng) 班 級: 姓 名: 學 號: 同組人姓名: 起 迄 日 期: 課程設計地點: 指導教師: 評閱意見:成績評定:評閱人: 日期:完成日期:2014年12月目錄一、課程設計的目的1二、設計內容和要求1三、數(shù)據(jù)采取的結構1四、功能模塊詳細設計14.1 詳細設計思想24.1.1 冒泡排序54.1.2 快速排序74.1.3 直接插入排序94.1.4 希爾排序104.1.5 直接選擇排序12 4.1.6 堆排序14 4.1.7歸并排序17五、總結或心得體會19六、參考文獻20七、附錄20一. 設計目的隨著計算機技術的發(fā)展

2、,各種排序算法不斷的被提出。排序算法在計算機科學中有非常重要的意義,且應用很廣泛。在以后的發(fā)展中排序對我們的學習和生活的影響會逐漸增大,很有必要學習排序知識。此次課程設計一方面使自己掌握排序的知識,另一方面鍛煉一下團隊合作開發(fā)系統(tǒng)的能力。二. 設計內容和要求功能要求:(1)界面友好,易與操作??刹捎貌藛位蚱渌藱C對話方式進行選擇。(2)實現(xiàn)各種內部排序。包括直接插入排序,冒泡排序,直接選擇排序,希爾排序,快速排序,堆排序,歸并排序。(3)待排序的元素的關鍵字為整數(shù)或(字符)??捎秒S機數(shù)據(jù)和用戶輸入數(shù)據(jù)作測試比較。比較的指標為有關鍵字參加的比較次數(shù)和關鍵字的移動次數(shù)(關鍵字交換以3次計)。(1)

3、 演示程序以人機對話的形式進行。每次測試完畢顯示各種比較指標值的列表,以便比較各種排序的優(yōu)劣。三. 本設計所采用的數(shù)據(jù)結構typedef struct int key;rectype;希爾排序排序算法演示系統(tǒng)冒泡排序歸并排序快速排序 直接插入排序直接選擇排序堆排序4. 功能模塊詳細設計4.1 詳細設計思想主函數(shù):#include#include#include #define l 8 /排序元素個數(shù)#define false 0#define true 1typedef structint key;rectype;rectype rl;int num; int sum;int sun; /定義

4、排序趟數(shù)的全局變量 /系統(tǒng)主界面/主函數(shù)int main()rectype s100; int i,k;char ch1,ch2,q;printf(ntt*排序算法演示系統(tǒng)*nntt請輸入%d個待排序的數(shù)據(jù):n,l);for(i=1;i=l;i+)printf(tt請輸入第%dth數(shù)據(jù):,i);scanf(%d,&si.key);getchar(); ch1=y;while(ch1=y) printf(ntt 菜 單 n);printf(ntt*n);printf(ntt * 1-更新排序數(shù)據(jù)* 2-直接插入排序 n);printf(ntt * 3-希 爾 排 序* 4-冒 泡 排 序 n);

5、printf(ntt * 5-快 速 排 序* 6-直接選擇排序 n);printf(ntt * 7-堆 排 序 * 8-歸 并 排 序 n);printf(ntt *0-退 出* n); printf(ntt*n);printf(ntt請選擇:);scanf(%c,&ch2);getchar();for(i=1;i=l;i+)ri.key=si.key;switch(ch2)case 1:printf(ntt請輸入%d個待排序數(shù)據(jù)ntt,l);for(i=1;i=l;i+)scanf(%d,&si.key);getchar();printf(tt);printf(ntt數(shù)據(jù)輸入完畢!);br

6、eak;case 2:insertsort();break;case 3:shellsort();break;case 4:bubblesort();break;case 5:printf(ntt原始數(shù)據(jù)為(按回車鍵開始排序):ntt);for(k=1;k=l;k+)printf(%5d,rk.key);getchar();printf(n);num=0;sun=0;sum=0;quicksort(1,l);printf(ntt排序最終結果是:ntt);for(k=1;k=l;k+)printf(%5d,rk.key);printf(ntt比較次數(shù)是:%dntt,sum);printf(ntt

7、交換次數(shù)是:%dntt,sun);break;case 6:selectsort();break;case 7:heap();break;case 8:mergesort();break;case 0:ch1=n;break;default:system(cls);/清屏printf(ntt對不起,您輸入有誤,請重新輸入!n);break;if(ch2!=0)if(ch2=2|ch2=3|ch2=4|ch2=5|ch2=6|ch2=7|ch2=8)printf(nntt排序完畢!);printf(ntt按回車鍵繼續(xù)!);q=getchar();if(q!=n)getchar();ch1=n;r

8、eturn 1;圖一 主界面4.1.1 冒泡排序核心思想 依次比較相鄰的兩個數(shù),將小數(shù)放在前面,大數(shù)放在后面,第一輪比較后,最大的數(shù)便被放到了最后;第二輪操作前n-1個數(shù)據(jù)(假設有n個數(shù)據(jù)),依然是依次比較相鄰的兩個數(shù),將小數(shù)放在前面,大數(shù)放在后面,倒數(shù)第二個數(shù)便是第二大的數(shù);同理第i輪操作前n-i+1的數(shù)據(jù)(假設i取值是從1開始的),則n-i+i位置上的數(shù)據(jù)為第i大的數(shù)據(jù)。一共有n-1輪,第i輪比較中共比較n-i次比較。核心代碼void bubblesort()int i,j,k,x=0,y=0,m=0;int exchange=true;/標志位exchange初始化為true 1prin

9、tf(ntt原始數(shù)據(jù)為(按回車鍵開始排序):ntt);for(k=1;k=l;k+)printf(%5d,rk.key);getchar();printf(n);for(i=1;il&exchange=true;i+)/外層對總的循環(huán)次數(shù)執(zhí)行次數(shù)exchange=false;for(j=1;j=l+1-i;j+) /內層相鄰記錄的交換與比較 m+;/比較次數(shù)+if(rj.keyrj-1.key)r0.key=rj.key;rj.key=rj-1.key;rj-1.key=r0.key;exchange=true;y+;/移動次數(shù)+m-;/比較次數(shù)if(exchange) /輸出語句printf

10、(tt第%d趟冒泡排序的結果為:ntt,i);for(k=1;k=l;k+) printf(%5d,rk.key);getchar();printf(n);printf(ntt比較次數(shù)是:tt);printf(%d,m);printf(ntt移動次數(shù)是:tt);printf(%d,y);printf(ntt排序最終結果是:ntt);for(i=1;i=l;i+) printf(%5d,ri.key);圖二 直接插入排序4.1.2 快速排序核心思想 首先檢查數(shù)據(jù)列表中的數(shù)據(jù)數(shù),如果小于兩個,則直接退出程序。如果有超過兩個以上的數(shù)據(jù),就選擇一個分割點將數(shù)據(jù)分成兩個部分,小于分割點的數(shù)據(jù)放在一組,其

11、余的放在另一組,然后分別對兩組數(shù)據(jù)排序。 通常分割點的數(shù)據(jù)是隨機選取的。這樣無論你的數(shù)據(jù)是否已被排列過,你所分割成的兩個字列表的大小是差不多的。而只要兩個子列表的大小差不多核心代碼/遞歸算法實現(xiàn)void quicksort(int low,int high) int i=low,j=high,k;r0.key=rlow.key;while(ij)while(ij&r0.key=rj.key) /右側掃描j-;sum+;if(ij) ri.key=rj.key;/交換 i+;sun+;while(ij&ri.keyr0.key)/左側掃描 i+;sum+;if(ij)rj.key=ri.key;

12、/交換j-;sun+;ri.key=r0.key;num+;/輸出語句包括排序的結果及次數(shù) printf(tt第%d趟快速排序的結果為:ntt,num);for(k=1;k=l;k+) printf(%5d,rk.key);getchar();printf(n);if(lowi-1) quicksort(low,i-1);/遞歸部分(左側)if(j+1high) quicksort(j+1,high);/遞歸部分(右側)圖三 快速排序4.1.3 直接插入排序核心思想經過i-1遍處理后,l1.i-1己排好序。第i遍處理僅將li插入l1.i-1的適當位置,使得l1.i又是排好序的序列。要達到這個目

13、的,我們可以用順序比較的方法。首先比較li和li-1,如果li-1 li,則l1.i已排好序,第i遍處理就結束了;否則交換li與li-1的位置,繼續(xù)比較li-1和li-2,直到找到某一個位置j(1ji-1),使得lj lj+1時為止核心代碼void insertsort()int i,j,k,m=0,x=0; /初始化比較次數(shù)變量m,移動次數(shù)變量xprintf(ntt原始數(shù)據(jù)為:(按回車鍵開始排序)ntt);for(k=1;k=l;k+)printf(%5d,rk.key);getchar();printf(n);/主要運行部分for(i=2;i=l;i+)if(ri.keyri-1.key)

14、r0=ri;j=i-1;while(r0.keyrj.key)rj+1=rj;j-;rj+1=r0;x+;m+;/輸出語句包括排序的結果及次數(shù) printf(tt第%d趟直接插入排序的結果為:ntt,m);for(k=1;k=l;k+) printf(%5d,rk.key);getchar();printf(n);printf(n);printf(ntt比較次數(shù)是:tt);printf(%d,m);printf(ntt移動次數(shù)是:tt);printf(%d,x);printf(ntt排序最終結果是:ntt);for(i=1;i=l;i+) printf(%5d,ri.key);圖四 直接插入排

15、序4.1.4 希爾排序核心思想 先取一個小于n的整數(shù)d1作為第一個增量,把文件的全部記錄分成d1個組。所有距離為dl的倍數(shù)的記錄放在同一個組中。先在各組內進行直接插入排序;然后,取第二個增量d2d1重復上述的分組和排序,直至所取的增量dt=1(dtdt-ld2d1),即所有記錄放在同一組中進行直接插入排序為止。核心代碼void shellsort()int i,j,gap,x,k,y=0,m=0; /初始化比較次數(shù)變量m,移動次數(shù)變量yprintf(ntt原始數(shù)據(jù)為:(按回車鍵開始排序)ntt);for(k=1;k0)for(i=gap+1;i0)if(rj.keyrj+gap.key)x=r

16、j.key;/交換語句rj.key=rj+gap.key;rj+gap.key=x;j=j-gap;y+;/移動次數(shù)+elsej=0;gap=gap/2;m+;/比較次數(shù)+/輸出語句包括排序的結果及次數(shù) printf(tt第%d趟希爾排序的結果為:ntt,m);for(k=1;k=l;k+)printf(%5d,rk.key);getchar();printf(n);printf(ntt比較次數(shù)是:tt);printf(%d,m);printf(ntt移動次數(shù)是:tt);printf(%d,y);printf(ntt排序最終結果是:ntt);for(i=1;i=l;i+)printf(%5d,

17、ri.key);printf(n); 圖五 希爾排序4.1.5 直接選擇排序核心思想 第一次從r0rn-1中選取最小值,與r0交換,第二次從r1rn-1中選取最小值,與r2交換,., 第i次從ri-1rn-1中選取最小值,與ri-1交換,.,第n-1次從rn-2rn-1中選取最小值,與rn-2交換,總共通過n-1次,得到一個按排序碼從小到大排列的有序序列.核心代碼void selectsort()int i,j,k,h,x=0,y=0;printf(ntt原始數(shù)據(jù)為(按回車鍵開始排序):ntt);for(k=1;k=l;k+)printf(%5d,rk.key);getchar();print

18、f(n);for(i=1;il;i+)h=i;for(j=i+1;j=l;j+)x+; /比較次數(shù)if(rj.keyrh.key)h=j; /確定最小值if(h!=i)r0.key=ri.key;ri.key=rh.key;rh.key=r0.key;y+; /移動次數(shù)printf(tt第%d趟選擇排序的結果為:ntt,i);for(k=1;k=l;k+)printf(%5d,rk.key);getchar();printf(n);/輸出語句包括排序的結果及次數(shù) printf(ntt比較次數(shù):%d,x);printf(ntt移動次數(shù):%d,y);printf(ntt排序最終結果是:ntt);f

19、or(i=1;i=l;i+)printf(%5d,ri.key);printf(n);圖六 選擇排序4.1.6 堆排序核心思想 堆排序是一樹形選擇排序,在排序過程中,將r1.n看成是一顆完全二叉樹的順序存儲結構,利用完全二叉樹中雙親結點和孩子結點之間的內在關系來選擇最小的元素。將原始記錄序列建成一個堆,成為初始堆,并輸出堆頂元素;調整剩余的記錄序列,使之成為一個新堆,再輸出堆頂元素;如此反復進行,當堆中只有一個元素時,整個序列的排序結束,輸出的序列便是原始序列的非遞減有序序列。在堆排序的過程中,主要負責兩方面的工作:一是如何將原始記錄序列構造成一個堆,即建立初始堆;二是輸出堆頂元素后,如何將剩

20、余記錄整理成一個新堆。核心代碼void createheap(int root,int index,int *x,int *y)int j,temp,finish;j=2*root; /j指向左孩子temp=rroot.key;finish=0;while(j=index&finish=0)if(jindex)if(rj.key=rj.key)finish=1;elserj/2.key=rj.key;(*y)+;j=j*2;*x = *x+2;rj/2.key=temp;(*y)+;/堆排序void heapsort()int i,j,temp,k,x=0,y=0;for(i=(l/2);i=

21、1;i-) /建立初始堆createheap(i,l,&x,&y);x=0;y=0;for(i=l-1,k=1;i=1;i-,k+) /將堆中根節(jié)點和最后一個節(jié)點交換temp=ri+1.key;ri+1.key=r1.key;r1.key=temp;createheap(1,i,&x,&y);printf(tt第%d趟堆排序的結果為:ntt,k);for(j=1;j=l;j+)printf(%5d,rj.key);getchar();printf(n);printf(ntt比較次數(shù)是:%dtt,x);printf(ntt移動次數(shù)是:%dtt,y);void heap()int i;printf

22、(ntt原始數(shù)據(jù)為(按回車鍵開始排序):ntt);for(i=1;i=l;i+)printf(%5d,ri.key);getchar();printf(n);heapsort();printf(ntt排序最終結果是:ntt);for(i=1;i=l;i+)printf(%5d,ri.key);printf(n);void merge(int low,int mm,int high,int *x,int *y)/兩個有序序列的合并int i=low,j=mm+1,p=0;rectype *r1; /i對第一個開始到結尾,j從第二個開始到結尾r1=new rectypehigh-low+1;if(

23、!r1)printf(內存不足!);while(i=mm&j=high)/兩序列從起始位置開始將小的元素放入到r1中r1p+=(ri.key=rj.key)?ri+:rj+;(*x)+;(*y)+;while(i=mm)/第二段結束,剩余放入r1中r1p+=ri+;(*y)+;while(j=high)/第二段剩余,剩余放入r1中r1p+=rj+;(*y)+;for(p=0,i=low;i=high;p+,i+)/剩余元素放入r1中,賦予rri=r1p;(*y)+;圖七 堆排序4.1.7 歸并排序核心思想將有n個記錄的原始序列看作n個有序子序列,每個子序列的長度為1,然后從第一個子序列開始,把

24、相鄰的子序列兩兩合并,得到n/2個長度為2或1的子序列(當子序列個數(shù)為奇數(shù)時,最后一組合并得到的序列長度為1),把這一過程稱為一次歸并排序,對第一次歸并排序后的n/2個子序列采用上述方法繼續(xù)順序成對歸并,如此重復,當最后得到的長度為n的一個子序列時,該子序列便是原始序列歸并排序后的有序序列。核心代碼void mergepass(int length,int *x,int *y)/一次二路歸并排序 int i;for(i=1;i+2*length-1=l;i=i+2*length) merge(i,i+length-1,i+2*length-1,x,y); /函數(shù)調用if(i+length-1l

25、) merge(i,i+length-1,l,x,y); /函數(shù)調用/歸并排序void mergesort() /二路歸并排序 int length,k,m=0,i,x=0,y=0;printf(ntt原始數(shù)據(jù)為(按回車鍵開始排序):ntt);for(k=1;k=l;k+) printf(%5d,rk.key);getchar();printf(n);for(length=1;lengthl;length*=2) mergepass(length,&x,&y);m+; /輸出語句包括排序的結果及次數(shù)printf(tt第%d趟歸并排序的結果為:ntt,m);for(k=1;k=l;k+) pri

26、ntf(%5d,rk.key);getchar();printf(n);printf(ntt排序最終結果是:ntt);for(i=1;i=l;i+) printf(%5d,ri.key);printf(n);printf(tt比較次數(shù):%dn,x);printf(tt移動次數(shù):%dn,y);圖八 歸并排序5. 總結或心得回顧這個設計過程,我學到了許多書本上沒有學到的知識。通過這次小組制作的程序,豐富了自己的實踐技能,擴展了本專業(yè)的知識面,使我受益非淺,同時也體驗到了搞軟件開發(fā)的困難度。在這次設計的同時我又從中學到了許多東西。但由于我對這樣的排序系統(tǒng)還只是一個開始,了解的不多,這其中或許還有很多

27、的不足,在這里也懇請各位老師能夠對我們的作品指明不足并加以改正??傊谶@一次的課程設計過程中,我們查閱了大量的資料,對數(shù)據(jù)結構有了一點初步的認識,對于網(wǎng)絡工程這些輔助性的教材也鞏固了不少,為我們這次的課設提供了很大的幫助,鍛煉了我們的能力,讓我更加熟練了這門程序設計語言:c/c+語言,系統(tǒng)地學習了數(shù)據(jù)結構方面的知識,并更進一步提高了我們在程序設計、調試方面的技巧。更重要的是,它還讓我們認識到了自己的不足,在編程方面,我僅僅是剛剛入門而已,以后的道路任重道遠,需要我不斷的豐富自己、充實自己,這樣才能在程序設計方面有所收獲。在最后也感謝我們的小組成員,我在他的幫忙下順利的做好自己負責的部分.六參

28、考文獻嚴蔚敏,吳偉明,數(shù)據(jù)結構(c語言版),清華大學出版社,2007年:p263-p288。七附錄#include#include#include #define l 8 /排序元素個數(shù)#define false 0#define true 1typedef structint key;rectype;rectype rl;int num; int sum;int sun; /定義排序趟數(shù)的全局變量 /系統(tǒng)主界面void bubblesort()int i,j,k,x=0,y=0,m=0;int exchange=true;/標志位exchange初始化為true 1printf(ntt原始數(shù)

29、據(jù)為(按回車鍵開始排序):ntt);for(k=1;k=l;k+)printf(%5d,rk.key);getchar();printf(n);for(i=1;il&exchange=true;i+)/外層對總的循環(huán)次數(shù)執(zhí)行次數(shù)exchange=false;for(j=1;j=l+1-i;j+) /內層相鄰記錄的交換與比較 m+;/比較次數(shù)+if(rj.keyrj-1.key)r0.key=rj.key;rj.key=rj-1.key;rj-1.key=r0.key;exchange=true;y+;/移動次數(shù)+m-;/比較次數(shù)if(exchange) /輸出語句printf(tt第%d趟冒泡

30、排序的結果為:ntt,i);for(k=1;k=l;k+) printf(%5d,rk.key);getchar();printf(n);printf(ntt比較次數(shù)是:tt);printf(%d,m);printf(ntt移動次數(shù)是:tt);printf(%d,y);printf(ntt排序最終結果是:ntt);for(i=1;i=l;i+) printf(%5d,ri.key);/遞歸算法實現(xiàn)void quicksort(int low,int high) int i=low,j=high,k;r0.key=rlow.key;while(ij)while(ij&r0.key=rj.key)

31、 /右側掃描j-;sum+;if(ij) ri.key=rj.key;/交換 i+;sun+;while(ij&ri.keyr0.key)/左側掃描 i+;sum+;if(ij)rj.key=ri.key;/交換j-;sun+;ri.key=r0.key;num+;/輸出語句包括排序的結果及次數(shù) printf(tt第%d趟快速排序的結果為:ntt,num);for(k=1;k=l;k+) printf(%5d,rk.key);getchar();printf(n);if(lowi-1) quicksort(low,i-1);/遞歸部分(左側)if(j+1high) quicksort(j+1,

32、high);/遞歸部分(右側)void insertsort()int i,j,k,m=0,x=0; /初始化比較次數(shù)變量m,移動次數(shù)變量xprintf(ntt原始數(shù)據(jù)為:(按回車鍵開始排序)ntt);for(k=1;k=l;k+)printf(%5d,rk.key);getchar();printf(n);/主要運行部分for(i=2;i=l;i+)if(ri.keyri-1.key)r0=ri;j=i-1;while(r0.keyrj.key)rj+1=rj;j-;rj+1=r0;x+;m+;/輸出語句包括排序的結果及次數(shù) printf(tt第%d趟直接插入排序的結果為:ntt,m);fo

33、r(k=1;k=l;k+) printf(%5d,rk.key);getchar();printf(n);printf(n);printf(ntt比較次數(shù)是:tt);printf(%d,m);printf(ntt移動次數(shù)是:tt);printf(%d,x);printf(ntt排序最終結果是:ntt);for(i=1;i=l;i+) printf(%5d,ri.key);void shellsort()int i,j,gap,x,k,y=0,m=0; /初始化比較次數(shù)變量m,移動次數(shù)變量yprintf(ntt原始數(shù)據(jù)為:(按回車鍵開始排序)ntt);for(k=1;k0)for(i=gap+1

34、;i0)if(rj.keyrj+gap.key)x=rj.key;/交換語句rj.key=rj+gap.key;rj+gap.key=x;j=j-gap;y+;/移動次數(shù)+elsej=0;gap=gap/2;m+;/比較次數(shù)+/輸出語句包括排序的結果及次數(shù) printf(tt第%d趟希爾排序的結果為:ntt,m);for(k=1;k=l;k+)printf(%5d,rk.key);getchar();printf(n);printf(ntt比較次數(shù)是:tt);printf(%d,m);printf(ntt移動次數(shù)是:tt);printf(%d,y);printf(ntt排序最終結果是:ntt)

35、;for(i=1;i=l;i+)printf(%5d,ri.key);printf(n); void selectsort()int i,j,k,h,x=0,y=0;printf(ntt原始數(shù)據(jù)為(按回車鍵開始排序):ntt);for(k=1;k=l;k+)printf(%5d,rk.key);getchar();printf(n);for(i=1;il;i+)h=i;for(j=i+1;j=l;j+)x+; /比較次數(shù)if(rj.keyrh.key)h=j; /確定最小值if(h!=i)r0.key=ri.key;ri.key=rh.key;rh.key=r0.key;y+; /移動次數(shù)pr

36、intf(tt第%d趟選擇排序的結果為:ntt,i);for(k=1;k=l;k+)printf(%5d,rk.key);getchar();printf(n);/輸出語句包括排序的結果及次數(shù) printf(ntt比較次數(shù):%d,x);printf(ntt移動次數(shù):%d,y);printf(ntt排序最終結果是:ntt);for(i=1;i=l;i+)printf(%5d,ri.key);printf(n); void createheap(int root,int index,int *x,int *y)int j,temp,finish;j=2*root; /j指向左孩子temp=rroo

37、t.key;finish=0;while(j=index&finish=0)if(jindex)if(rj.key=rj.key)finish=1;elserj/2.key=rj.key;(*y)+;j=j*2;*x = *x+2;rj/2.key=temp;(*y)+;/堆排序void heapsort()int i,j,temp,k,x=0,y=0;for(i=(l/2);i=1;i-) /建立初始堆createheap(i,l,&x,&y);x=0;y=0;for(i=l-1,k=1;i=1;i-,k+) /將堆中根節(jié)點和最后一個節(jié)點交換temp=ri+1.key;ri+1.key=r1

38、.key;r1.key=temp;createheap(1,i,&x,&y);printf(tt第%d趟堆排序的結果為:ntt,k);for(j=1;j=l;j+)printf(%5d,rj.key);getchar();printf(n);printf(ntt比較次數(shù)是:%dtt,x);printf(ntt移動次數(shù)是:%dtt,y);void heap()int i;printf(ntt原始數(shù)據(jù)為(按回車鍵開始排序):ntt);for(i=1;i=l;i+)printf(%5d,ri.key);getchar();printf(n);heapsort();printf(ntt排序最終結果是:ntt);for(i=1;i=l;i+)printf(%5d,ri.key);printf(n);void merge(int low,int mm,int high,int *x,int *y)/兩個有序序列的合并int i=low,j=mm+1,p=0;rectype *r1; /i對第一個開始到結尾,j從第二個開始到結尾r1=new rectypehigh-low+1;if(!r1)printf(內存不足!);while(i=mm&j=high)/兩序列從起始位置開始將小的元素放入到r1中r1p+=(ri.key=rj.key)?ri+:rj+;(*x)+;

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論