版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p><b> 數(shù) 據(jù) 結(jié) 構(gòu)</b></p><p> 課 程 設(shè) 計 說 明 書</p><p> 2012 年 1月 8 日</p><p><b> 設(shè)計目的</b></p><p> 本系統(tǒng)是為了實現(xiàn)和比較各種不同排序方法的不同復(fù)雜度,而建立的,從不同的角度比較各
2、算法的優(yōu)劣,從而使使用者能對個排序方法有更清晰的了解.</p><p><b> 設(shè)計內(nèi)容和要求</b></p><p> 本次設(shè)計的內(nèi)容主要有實現(xiàn)各種排序算法以及比較各種算法。要求主要是要執(zhí)行對一種數(shù)據(jù)類型的序列進(jìn)行所有排序方法的排序計算,并返回序列及各算法的排序指標(biāo)。</p><p> 3.本設(shè)計所采用的數(shù)據(jù)結(jié)構(gòu)</p>
3、<p> 本次設(shè)計主要采用的數(shù)據(jù)結(jié)構(gòu)有結(jié)構(gòu)體定義,直接排序,選擇排序,歸并排序,快速排序,冒泡排序,希爾排序,堆排序等。</p><p> 4.功能模塊詳細(xì)設(shè)計</p><p> 4.1 詳細(xì)設(shè)計思想</p><p> 本次設(shè)計分主題設(shè)計和模塊設(shè)計兩部分。</p><p> 主體設(shè)計方面,本系統(tǒng)的主要數(shù)據(jù)類型為含有一個關(guān)
4、鍵字的結(jié)構(gòu)體類型,命名為datatype;設(shè)置兩個全局變量數(shù)組,cn和mn,分別用于記錄每種排序方法中的各排序元素的比較次數(shù)和移動次數(shù)(關(guān)鍵字交換以3次計)的總和。</p><p> 模塊設(shè)計方面,本系統(tǒng)大致可分為排序模塊部分和運行模塊部分。排序模塊部分分為歸并排序模塊,快速排序模塊,冒泡排序模塊,選擇排序模塊,直接排序模塊,希爾排序模塊,堆排序模塊;運行模塊部分分為主函數(shù),自行輸入模塊,隨機模塊,輸出模塊。&
5、lt;/p><p> 以下是各排序算法的核心設(shè)計思想:</p><p> 運行模塊個算法如下:</p><p><b> 4.2 核心代碼</b></p><p> #include<stdio.h></p><p> #include<stdlib.h></p
6、><p> #include<conio.h></p><p> #define MAXNUM 100</p><p> typedef struct</p><p> { int key;</p><p> } datatype;</p><p> datatype R
7、[MAXNUM];/*定義類型*/</p><p> int cn[MAXNUM],mn[MAXNUM];</p><p> void D_InsertSort(datatype R[ ], int n)/*直接排序*/</p><p><b> {</b></p><p><b> int i,j;
8、</b></p><p> extern int cn[MAXNUM],mn[MAXNUM];</p><p> for(i=2; i<=n; i++)</p><p> { cn[0]++;</p><p> if (R[i].key<R[i-1].key)</p><p> {R[
9、0]=R[i]; mn[0]++;</p><p> for(j=i-1; R[0].key<R[j].key; j--)</p><p> R[j+1]=R[j];</p><p> R[j+1]=R[0]; mn[0]+=2;</p><p><b> }</b></p><p&
10、gt;<b> }</b></p><p><b> }</b></p><p> void Select_Sort(datatype R[ ],int n)/*簡單選擇排序*/</p><p><b> {</b></p><p> int i,j,k;</p
11、><p> extern int cn[MAXNUM],mn[MAXNUM];</p><p> for(i=1;i<n;i++)</p><p><b> { k=i;</b></p><p> for(j=i+1; j<=n; j++)</p><p><b>
12、 {</b></p><p><b> cn[1]++;</b></p><p> if(R[j].key<R[k].key)</p><p><b> k=j;</b></p><p><b> }</b></p><p>
13、<b> if (i==k)</b></p><p> { R[0]=R[k];</p><p> R[k]=R[i];</p><p> R[i]=R[0]; mn[1]+=3; }</p><p><b> }</b></p><p><b> }
14、</b></p><p> void Bubble_Sort (datatype R[ ], int n)/*冒泡排序*/</p><p><b> {</b></p><p><b> int i, j;</b></p><p> extern int cn[MAXNUM],m
15、n[MAXNUM];</p><p><b> int swap;</b></p><p> for(i=1; i<n-1; i++)</p><p><b> {swap=0;</b></p><p> for(j=1; j<=n-i; j++)</p><
16、p><b> {</b></p><p><b> cn[2]++;</b></p><p> if (R[j].key<R[j+1].key)</p><p> {R[0]=R[j];</p><p> R[j]=R[j+1];</p><p> R
17、[j+1]=R[0]; mn[2]+=3;</p><p><b> swap=1;</b></p><p><b> }}</b></p><p> if(swap==0) break;</p><p><b> }</b></p><p>&
18、lt;b> }</b></p><p> void HeapAdjust(datatype R[ ], int s, int t)</p><p><b> {</b></p><p> datatype rc;</p><p> extern int cn[MAXNUM],mn[MAXNUM
19、];</p><p><b> int i,j ;</b></p><p><b> rc=R[s];</b></p><p><b> i=s;</b></p><p> for(j=2*i; j<=t; j=2*j)</p><p>
20、 { cn[3]++;</p><p> if(j<t && R[j].key<R[j+1].key)j=j+1;</p><p> if(rc.key > R[j].key) break;</p><p> R[i]=R[j]; mn[3]++;</p><p><b> i=j
21、;</b></p><p><b> }</b></p><p><b> R[i]=rc;</b></p><p><b> }</b></p><p> void HeapSort(datatype R[ ], int n)/*堆排序*/</p&g
22、t;<p><b> {</b></p><p><b> int i;</b></p><p> extern int cn[MAXNUM],mn[MAXNUM];</p><p> for(i=n/2; i>0; i-- )</p><p> HeapAdjust(
23、R, i, n);</p><p> for(i=n; i>1; i--)</p><p> { R[0]=R[1];</p><p> R[1]=R[i];</p><p> R[i]=R[0]; mn[3]+=3;</p><p> HeapAdjust(R,1, i-1);</p>
24、<p><b> }</b></p><p><b> }</b></p><p> void Merge(datatype R[ ], datatype R1[ ], int s, int m , int t)</p><p><b> {</b></p>&l
25、t;p> int i,j,k;</p><p> extern int cn[MAXNUM],mn[MAXNUM];</p><p> i=s; j=m+1; k=s;</p><p> while (i<=m&&j<=t)</p><p><b> {</b><
26、/p><p><b> cn[4]++;</b></p><p> if(R[i].key<R[j].key)</p><p> { R1[k++]=R[i++]; mn[4]++;}</p><p><b> else</b></p><p> { R1[k+
27、+]=R[j++]; mn[4]++;}</p><p><b> }</b></p><p> while (i<=m) { R1[k++]=R[i++]; mn[4]++; }</p><p> while (j<=t) { R1[k++]=R[j++]; mn[4]++;}</p><p>&
28、lt;b> }</b></p><p> void MSort(datatype R[ ], datatype R1[ ], int s, int t)</p><p><b> {</b></p><p><b> int m;</b></p><p> extern
29、int cn[MAXNUM],mn[MAXNUM];</p><p> if(s==t) { R1[s]=R[s]; mn[4]++;}</p><p> else {m=(s+t)/2;</p><p> MSort(R, R1, s, m);</p><p> MSort(R, R1, m+1, t);</p>
30、<p> Merge(R1, R, s, m, t);</p><p><b> }</b></p><p><b> }</b></p><p> void MergeSort(datatype R[ ], datatype R1[ ], int n)/*歸并排序*/</p><p&
31、gt;<b> {</b></p><p> MSort(R, R1,1, n);</p><p><b> }</b></p><p> int Partition(datatype R[ ], int low, int high)</p><p><b> {</b&g
32、t;</p><p> extern int cn[MAXNUM],mn[MAXNUM];</p><p> R[0]=R[low]; mn[5]++;</p><p> while(low<high)</p><p> { while(low<high&&R[high].key>=R[0].key)
33、 {cn[5]++; high--;}</p><p> if(low<high) { R[low]=R[high]; low++; mn[5]++; }</p><p> while(low<high&&R[low].key<R[0].key) { mn[5]++; low++; }</p><p> if(low&
34、lt;high) {R[high]=R[low]; high--; mn[5]++; }</p><p><b> }</b></p><p> R[low]=R[0]; mn[5]++;</p><p> return low;</p><p><b> }</b></p>
35、;<p> void Quick_Sort(datatype R[ ], int s, int t)/*快速排序*/</p><p><b> {</b></p><p><b> int i;</b></p><p><b> if( s<t )</b></p&g
36、t;<p><b> {</b></p><p> i = Partition(R, s, t);</p><p> Quick_Sort(R, s, i-1);</p><p> Quick_Sort(R, i+1, t);</p><p><b> }</b></p
37、><p><b> }</b></p><p> void prin(datatype R[],int n)</p><p><b> {</b></p><p><b> int i ;</b></p><p> printf("排序的
38、結(jié)果為:");</p><p> for(i=1;i<=n;i++)</p><p> printf("%d ",R[i]);</p><p> printf("\n ");</p><p><b> }</b></p><p>
39、 void sort(datatype R[],int n)/*希爾排序*/</p><p><b> {</b></p><p> int gap,i,j,temp;</p><p> extern int cn[MAXNUM],mn[MAXNUM];</p><p> for(gap=n/2;gap>0
40、;gap /= 2) /* 設(shè)置排序的步長,步長gap每次減半,直到減到1 */</p><p><b> {</b></p><p> for(i=gap;i<n;i++) /* 定位到每一個元素 */</p><p><b> {</b></p><p> for(j=i-gap
41、;(j >= 0) && (R[j].key > R[j+gap].key);j -= gap ) /* 比較相距gap遠(yuǎn)的兩個元素的大小,根據(jù)排序方向決定如何調(diào)換 */</p><p><b> {</b></p><p> temp=R[j].key;</p><p> R[j].key=R[j+gap].
42、key;</p><p> R[j+gap].key=temp;</p><p><b> cn[6]+=1;</b></p><p><b> mn[6]+=3;</b></p><p><b> }</b></p><p><b>
43、 }</b></p><p><b> }</b></p><p> } </p><p> void sui_ji()</p><p><b> {</b></p><p><b>
44、 int i,n;</b></p><p> datatype R[MAXNUM]={0},R1[MAXNUM]={0};;</p><p> a:printf("請輸入你要輸入的個數(shù):");</p><p> scanf("%d",&n);</p><p><b>
45、; if(n>100)</b></p><p><b> {</b></p><p> printf("超出范圍重新輸入!!!\n");</p><p><b> goto a;</b></p><p><b> }</b><
46、;/p><p> printf("排序前元素順序為:");</p><p> for(i=1;i<n+1;i++)</p><p><b> {</b></p><p> R[i].key=rand();</p><p> printf("%d &quo
47、t;,R[i].key);</p><p><b> }</b></p><p> printf("\n");</p><p> D_InsertSort(R,n);/*直接排序*/</p><p> prin(R,n);</p><p> Select_Sort(R
48、,n);/*簡單選擇排序*/</p><p> Bubble_Sort(R, n);/*冒泡排序*/</p><p> HeapSort(R, n);/*堆排序*/</p><p> MergeSort(R, R1, n);/*二路歸并排序*/</p><p> Quick_Sort(R,0, n);/*快速排序*/</p>
49、;<p> sort(R,n);/*希爾排序*/</p><p><b> }</b></p><p> void zi_xing_input()</p><p> { int n,i;</p><p> datatype R1[MAXNUM]={0};</p><p>
50、; printf("請輸入你要輸入的個數(shù)(不大于100的整數(shù)):");</p><p> scanf("%d",&n);</p><p> printf("請輸入各個元素:");</p><p> for(i=1;i<n+1;i++)</p><p> sca
51、nf("%d",&R1[i].key);</p><p> printf("排序前元素順序為:");</p><p> for(i=1;i<n+1;i++) printf("%d ",R1[i].key);</p><p> printf("\n");</p
52、><p> D_InsertSort(R1,n);/*直接排序*/</p><p> prin(R1,n);</p><p> Select_Sort(R1,n);/*簡單選擇排序*/</p><p> Bubble_Sort(R1, n);/*冒泡排序*/</p><p> HeapSort(R1, n);/*
53、堆排序*/</p><p> Quick_Sort(R1,0, n);/*快速排序*/</p><p> sort(R,n);/*希爾排序*/</p><p><b> }</b></p><p> int main()</p><p><b> {</b><
54、/p><p> extern int cn[MAXNUM],mn[MAXNUM];</p><p><b> char s;</b></p><p> printf(“ 排序算法實現(xiàn)與演示統(tǒng) \n ”);</p><p> printf(" ┏*
55、*****************************┓\n");</p><p> printf(" ┃------- 歡 迎 使 用 ----┃\n");</p><p> printf(" ┃-----(1)隨 機 取 數(shù)-------┃\n");</p>&l
56、t;p> printf(" ┃-----(2)自 行 輸 入-------┃\n");</p><p> printf(" ┃-----(0)退 出 使 用-------┃\n");</p><p> printf(" ┗***********************
57、*******┛\n");</p><p> printf(" 請 選 擇 操 作 方 式: ");</p><p> b:s=getch();</p><p><b> switch(s)</b></p><p><b>
58、 {</b></p><p> case '1': system("cls") ; sui_ji(); break;</p><p> case '2': system("cls"); zi_xing_input(); break;</p><p> case '
59、;0': printf(" 謝謝使用!! "); exit(0); break;</p><p> default:printf("錯誤輸入,重新輸入!");goto b;</p><p><b> }</b></p><p> printf("\n &quo
60、t;);</p><p> printf(" 比 較 結(jié) 果 \n");</p><p> printf(" \n");</p><p> printf(" 排序方式 比較次數(shù) 移動次數(shù)
61、\n");</p><p> printf(" \n");</p><p> printf(" 直 接 %d %d \n",cn[0],mn[0]/3);</p><p> printf(" \n");<
62、/p><p> printf(" 簡單選擇 %d %d \n",cn[1],mn[1]/3);</p><p> printf(" \n");</p><p> printf(" 冒 泡 %d
63、 %d \n",cn[2],mn[2]/3);</p><p> printf(" \n");</p><p> printf(" 堆 排 序 %d %d \n",cn[3],mn[3]/3);</p><p
64、> printf(" \n");</p><p> printf(" 二路歸并 %d %d \n",cn[4],mn[4]/3);</p><p> printf(" \n");</p><p> printf(&q
65、uot; 快 速 %d %d \n",cn[5],mn[5]/3);</p><p> printf(" \n");</p><p> printf(" 希爾排序 %d %d \n&qu
66、ot;,cn[6],mn[6]/3);</p><p> getchar(); </p><p> printf("謝謝使用!^ _ ^\n");</p><p> system("PAUSE");</p><p><b> return 0;</b></p&g
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 排序算法數(shù)據(jù)結(jié)構(gòu)課程設(shè)計說明書
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計--排序算法
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計---排序算法比較
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計--排序算法比較
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計--排序算法演示系統(tǒng)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計---排序算法的實現(xiàn)
- 拓?fù)渑判?算法與數(shù)據(jù)結(jié)構(gòu)課程設(shè)計)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計--二路歸并排序說明書
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計說明書--- 車廂調(diào)度問題
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計----內(nèi)部排序算法性能分析
- 大數(shù)據(jù)結(jié)構(gòu)課程設(shè)計排序算法演示系統(tǒng)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計--內(nèi)部排序算法的比較
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計--幾種排序算法的演示
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告--排序
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計---排序綜合
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計說明書--進(jìn)制轉(zhuǎn)換的實現(xiàn)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告---幾種排序算法的演示
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計---希爾排序,冒泡排序,快速排序
評論
0/150
提交評論