




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、.算法設(shè)計(jì)與分析實(shí)驗(yàn)報(bào)告實(shí)驗(yàn)1 分治算法姓名 學(xué)號(hào) 班級(jí) 實(shí)驗(yàn)日期 2015.1.13 實(shí)驗(yàn)地點(diǎn) 一、實(shí)驗(yàn)?zāi)康?、掌握分治算法的設(shè)計(jì)思想與分析方法;2、掌握歸并排序、快速排序等高效排序算法。二、實(shí)驗(yàn)環(huán)境1、硬件環(huán)境CPU:酷睿i5內(nèi)存:4GB硬盤:1TB2、軟件環(huán)境操作系統(tǒng):win10編程環(huán)境:Dev-C+編程語言:C語言三、實(shí)驗(yàn)內(nèi)容1、編寫程序,實(shí)現(xiàn)歸并排序算法。(1)歸并排序算法歸并排序是建立在歸并操作上的一種有效的排序算法,該算法是采用分治法(Divide and Conquer)的一個(gè)非常典型的應(yīng)用。將已有序的子序列合并,得到完全有序的序列;即先使每個(gè)子序列有序,再使子序列段間有序。(
2、2)歸并排序算法分析時(shí)間復(fù)雜度:O(nlogn)空間復(fù)雜度O(nlogn)(3)編程要求l 待排序數(shù)組長度至少為16,數(shù)組中可以有相同元素;l 按遞增排序。(4)程序代碼(含注釋)/歸并排序算法實(shí)現(xiàn) #include <stdio.h>#include <malloc.h>#define MAXE 50/線性表中最多元素個(gè)數(shù)typedef int KeyType;typedef char InfoType10;typedef struct /記錄類型KeyType key; /關(guān)鍵字項(xiàng) InfoType data; /其他數(shù)據(jù)項(xiàng),類型為InfoType RecType;
3、void Merge(RecType R,int low,int mid,int high) /將兩個(gè)有序表Rlow.mid和Rmid+1.high歸并為一個(gè)有序表Rlow.high中RecType *R1;int i=low,j=mid+1,k=0; /k是R1的下標(biāo),i、j分別為第1、2段的下標(biāo)R1=(RecType *)malloc(high-low+1)*sizeof(RecType); /動(dòng)態(tài)分配空間while (i<=mid && j<=high) /在第1段和第2段均未掃描完時(shí)循環(huán)if (Ri.key<=Rj.key) /將第1段中的記錄放入R1
4、中R1k=Ri;i+;k+; else /將第2段中的記錄放入R1中R1k=Rj;j+;k+; while (i<=mid) /將第1段余下部分復(fù)制到R1 R1k=Ri;i+;k+; while (j<=high) /將第2段余下部分復(fù)制到R1R1k=Rj;j+;k+; for (k=0,i=low;i<=high;k+,i+) /將R1復(fù)制回R中 Ri=R1k; void MergePass(RecType R,int length,int n)/實(shí)現(xiàn)一趟歸并int i;for (i=0;i+2*length-1<n;i=i+2*length) /歸并length長的
5、兩相鄰子表Merge(R,i,i+length-1,i+2*length-1); if (i+length-1<n) /余下兩個(gè)子表,后者長度小于lengthMerge(R,i,i+length-1,n-1); /歸并這兩個(gè)子表void MergeSort(RecType R,int n) /二路歸并排序算法int length,k,i=1;/i用于累計(jì)歸并的趟數(shù)for (length=1;length<n;length=2*length)MergePass(R,length,n);printf(" 第%d趟歸并 ",i+);/輸出每一趟的排序結(jié)果for (k=
6、0;k<n;k+)printf("%4d",Rk.key);printf("n");int main()int i,k,n;RecType RMAXE;printf("請(qǐng)輸入元素個(gè)數(shù)n:n");scanf("%d",&n);printf("請(qǐng)輸入%d個(gè)元素:n",n);for (i=0;i<n;i+)scanf("%d",&Ri.key);printf("n");MergeSort(R,n);/執(zhí)行排序函數(shù)printf(&quo
7、t;歸并排序結(jié)果:n");printf(" ");for (k=0;k<n;k+)printf("%5d",Rk.key);printf("nn");return 0;(5)程序輸出2、編寫程序,實(shí)現(xiàn)快速排序算法。(1)快速排序算法基本思想是:通過一趟排序?qū)⒁判虻臄?shù)據(jù)分割成獨(dú)立的兩部分,其中一部分的所有數(shù)據(jù)都比另外一部分的所有數(shù)據(jù)都要小,然后再按此方法對(duì)這兩部分?jǐn)?shù)據(jù)分別進(jìn)行快速排序,整個(gè)排序過程可以遞歸進(jìn)行,以此達(dá)到整個(gè)數(shù)據(jù)變成有序序列。(2)快速排序算法分析時(shí)間復(fù)雜度:O(nlogn)空間復(fù)雜度:O(nlogn)(
8、3)編程要求l 待排序數(shù)組長度至少為16,數(shù)組中可以有相同元素;l 按遞增排序。(4)程序代碼(含注釋)/快速排序算法實(shí)現(xiàn) #include <stdio.h>#define MAXE 50/線性表中最多元素個(gè)數(shù)typedef int KeyType;typedef char InfoType10;typedef struct /記錄類型KeyType key; /關(guān)鍵字項(xiàng) InfoType data; /其他數(shù)據(jù)項(xiàng),類型為InfoType RecType;void QuickSort(RecType R,int s,int t) /對(duì)Rs至Rt的元素進(jìn)行快速排序int i=s,j
9、=t,k;RecType temp;if (s<t) /區(qū)間內(nèi)至少存在一個(gè)元素的情況temp=Rs; /用區(qū)間的第1個(gè)記錄作為基準(zhǔn) while (i!=j) /從區(qū)間兩端交替向中間掃描,直至i=j為止while (j>i && Rj.key>temp.key) j-; /從右向左掃描,找第1個(gè)關(guān)鍵字小于temp.key的Rj if (i<j) /表示找到這樣的Rj,Ri、Rj交換Ri=Rj;i+; while (i<j && Ri.key<temp.key) i+;/從左向右掃描,找第1個(gè)關(guān)鍵字大于temp.key的記錄Ri
10、if (i<j) /表示找到這樣的Ri,Ri、Rj交換Rj=Ri;j-; Ri=temp; QuickSort(R,s,i-1); /對(duì)左區(qū)間遞歸排序QuickSort(R,i+1,t); /對(duì)右區(qū)間遞歸排序int main()int i,k,n;RecType RMAXE;printf("請(qǐng)輸入元素個(gè)數(shù)n:n");scanf("%d",&n);printf("請(qǐng)輸入%d個(gè)元素:n",n);for (i=0;i<n;i+)scanf("%d",&Ri.key);printf("n");QuickSort(R,0,n-1);/執(zhí)行排序函數(shù)printf("快速排序結(jié)果:n");printf(" ");for (k=0;k<n;k+)printf("%5d",Rk.key);printf("nn");return 0;(5)程序輸出四、實(shí)驗(yàn)總結(jié)(心得體會(huì)、需要
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 輻射性眼外傷病人的護(hù)理
- 胸腔鏡肺癌根治術(shù)護(hù)理查房
- 2025本地生活服務(wù)品牌計(jì)劃
- 小學(xué)四年級(jí)書法比賽組織計(jì)劃
- 2025公司廠級(jí)員工安全培訓(xùn)考試試題附參考答案【基礎(chǔ)題】
- 2024-2025公司三級(jí)安全培訓(xùn)考試試題及答案黃金題型
- 中班社會(huì)交往能力提升計(jì)劃
- 2024湖北十堰融資擔(dān)保集團(tuán)有限公司招聘5人筆試參考題庫附帶答案詳解
- 農(nóng)業(yè)人力資源部人才引進(jìn)與工作計(jì)劃
- 部編版小學(xué)語文一年級(jí)下冊(cè)課外拓展活動(dòng)計(jì)劃
- 《習(xí)作:心愿》課件(兩套)
- 胃腸鏡檢查健康宣教
- 老年人譫妄中西醫(yī)結(jié)合診療專家共識(shí)
- 2020年度臨床護(hù)理技術(shù)操作規(guī)程及質(zhì)量標(biāo)準(zhǔn)
- 期中句型轉(zhuǎn)換練習(xí)專項(xiàng)過關(guān)卷(試題)-2023-2024學(xué)年譯林版(三起)英語四年級(jí)下冊(cè)
- 事業(yè)單位工作人員調(diào)動(dòng)申報(bào)表
- 《安全教育騎車安全》
- 申請(qǐng)判決書紙質(zhì)版
- 在英語教學(xué)中如何激發(fā)學(xué)生學(xué)習(xí)英語興趣
- 主題活動(dòng)12:小班語言活動(dòng)《狼和七只小羊》
- 眼科護(hù)理中的安全風(fēng)險(xiǎn)評(píng)估與控制策略
評(píng)論
0/150
提交評(píng)論