數(shù)據(jù)結構 排序算法設計和比較_第1頁
數(shù)據(jù)結構 排序算法設計和比較_第2頁
數(shù)據(jù)結構 排序算法設計和比較_第3頁
數(shù)據(jù)結構 排序算法設計和比較_第4頁
數(shù)據(jù)結構 排序算法設計和比較_第5頁
已閱讀5頁,還剩1頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、數(shù)據(jù)結構實驗報告五專業(yè): 自動化 班級: 0710 學號: 0901071002 姓名: 日期: 2009. 12.15 程序:排序算法設計比較 實驗五排序算法設計和比較【實驗內容與要求】問題描述:利用直接插入排序、冒泡排序、快速排序對數(shù)列進行排序?;疽螅海?) 能隨機生成30個值為0到100的數(shù)。(2) 用于排序的輸入數(shù)列可以是要求(1)中隨機生成的,也可以是鍵盤輸入。(3) 輸出結果為利用三種方法排序后的結果,并能顯示三種算法時間、空間性能參數(shù)值?!緶y試數(shù)據(jù)】由隨機自行生成若干個數(shù),進行排序。二、程序設計的基本思想,原理和算法描述:(包括程序的結構,數(shù)據(jù)結構,輸入/輸出設計,符號名說明

2、等)1) 符號說明: m1,m2,m3 代表三種排序法的循環(huán)次數(shù) a,b,c 分別用來存儲三次排序的數(shù)據(jù) temp 中間變量 n 參與排序的數(shù)字個數(shù) maopao(a,n) 冒泡程序排序 zhicha(b,n) 直接插入排序 quick(a,h,l) 快速排序法 h 分塊排序的上限 l 分塊排序的下限2) 程序說明(結構,輸入輸出)這個程序整個流程比較自然,一脈相傳,即先輸入要排序的個數(shù),然后選擇要輸入的方式,將產(chǎn)生的數(shù)傳到數(shù)組中,然后依次地用冒泡子程序,直接插入的程序,快速排序的方法,依次排序,并將排好的數(shù)輸出,以及算法的時間復雜率。三、源程序及注釋:#include"stdio.

3、h"#include"time.h"int m1=0;全局變量定義冒泡法循環(huán)的次數(shù)int m2=0; 全局變量定義直接插入法循環(huán)的次數(shù)int m3=0; 全局變量定義快速法循環(huán)的次數(shù) int suiji(int a,int n) ;隨機生成目的數(shù)函數(shù) int i,j,temp; srand(unsigned)time(NULL); srand播下一個種子 for(i=0;i<n;i+) ai=rand()%100; rand得到的數(shù)為0到100,依次傳到a中 printf(" %d",ai); jianpan(int a,int n) 鍵

4、盤輸入目的數(shù)函數(shù) int i,j,k,l; for(i=0;i<n;i+) 依次輸入目的數(shù) printf("input %dnumber:",i+1); scanf("%d",&ai); maopao(int a,int n) 冒泡法排序程序 int i,j,temp; for(i=0;i<n-1;i+) for(j=1;j<(n-i);j+) ;具體的排序過程 if(aj>aj-1) temp=aj; aj=aj-1; aj-1=temp; m1+; 計算循環(huán)次數(shù) printf(" Bubba the sort

5、ed nember:n"); for(i=0;i<n;i+) printf(" %d",ai); 將排好的數(shù)依次顯示 if(i+1)%5=0) printf("n"); 每輸出5個數(shù)換行 printf("time effective:%d",m1); 輸出冒泡法的時間效率m1 zhicha(int b,int n) 直接插入排序子程序 int i,j,temp; printf("nDirect :n"); for(i=1;i<n;i+) temp=bi; for(j=i;j>0&

6、&temp>bj-1;-j) 具體排序過程bj=bj-1;m2+;bj=temp; for(i=0;i<n;i+) printf(" %d",bi); 將排好的數(shù)顯示出來 if(i+1)%5=0) printf("n"); printf("time effective:%dn",m2);輸出時間效率 quick(int c,int l,int h) 快速排序法 int temp; int i,j,k; i=l;j=h; if(l<h) temp=cl; while(i<j) while(i<j&a

7、mp;&cj<temp);具體排序過程 j-; m3+; if(i<j) ci+=cj; while(i<j&&ci>temp) i+; m3+; if(i<j) cj-=ci; ci=temp; quick(c,l,i-1);遞歸調用排序 quick(c,i+1,h);遞歸調用排序 main() int i,j,k,n; int a100,b100,c100; 定義三個數(shù)組來存放三種方法的數(shù)字 clrscr(); 清屏函數(shù) printf("input number:"); scanf("%d",&a

8、mp;n); 輸入要參與排序的數(shù)目 "); scanf("%d",&k); 選擇輸入的方式 if(k=1) k=1 則調用隨機函數(shù)調用 suiji(a,n); if(k=2) k=2 則調用鍵盤輸入函數(shù) jianpan(a,n); for(i=0;i<n;i+) bi=ai;ci=ai; maopao(a,n); 調用冒泡法程序 zhicha(b,n); 調用直接插入排序 printf("Quick sort:n"); quick(c,0,n-1); 調用快速排序法 for(i=0;i<n;i+) printf("

9、 %d",ci); if(i+1)%5=0) printf("n"); printf("time effective:%d",m3); getchar(); getchar();四、運行輸出結果:五、調試和運行程序過程中產(chǎn)生的問題及采取的措施: 在寫程序的過程思路比較清晰,遇到的困難主要是編程軟件的不兼容,或是某些c語言規(guī)則在一些軟件上為非法的,早先我用的一直用地是devC+,但是在用隨機生成數(shù)子函數(shù),一直提示有錯誤,改正不了,最后只好用最原始的turbo C問題解決了,發(fā)現(xiàn)最好用的還是tc啊,以后只用突出(我電腦一直裝不了vc+,不知道怎么回事),在具體編程中需要考慮的是函數(shù)形參和實參的格式,一定要一致。六、對算法的程序的討論、分析,改進設想,其它經(jīng)驗教訓: 這次程序中主要用三種排序方法:a。冒泡排序b直接插入排序c??焖倥判?。其中冒泡排序的時間復雜度:O(n2) 空間復雜度:O(1)直接插入排序時間復雜度:O(n2) 空間復雜度:O(1)序法 最差時間分析平均時間

溫馨提示

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

評論

0/150

提交評論