




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、實(shí) 驗(yàn) 報 告(2011/2012學(xué)年 第一學(xué)期)課程名稱算法分析與設(shè)計(jì)A實(shí)驗(yàn)名稱分治策略實(shí)驗(yàn)時間年月日指導(dǎo)單位計(jì)算機(jī)學(xué)院軟件工程系指導(dǎo)教師學(xué)生姓名班級學(xué)號學(xué)院(系)專 業(yè)實(shí) 驗(yàn) 報 告實(shí)驗(yàn)名稱分治策略指導(dǎo)教師實(shí)驗(yàn)類型驗(yàn)證實(shí)驗(yàn)學(xué)時2實(shí)驗(yàn)時間一、 實(shí)驗(yàn)?zāi)康暮腿蝿?wù)理解分治法的算法思想,閱讀實(shí)現(xiàn)書上已有的部分程序代碼并完善程序,加深對分治法的算法原理及實(shí)現(xiàn)過程的理解。 用分治法實(shí)現(xiàn)一組無序序列的兩路合并排序和快速排序。要求清楚合并排序及快速排序的基本原理,編程實(shí)現(xiàn)分別用這兩種方法將輸入的一組無序序列排序?yàn)橛行蛐蛄泻筝敵觥?二、 實(shí)驗(yàn)環(huán)境(實(shí)驗(yàn)設(shè)備) VC+6.0三、實(shí)驗(yàn)原理及內(nèi)容(包括操作過程、結(jié)果
2、分析等)實(shí)驗(yàn)原理1、排序是數(shù)據(jù)處理中常用的重要手段,是指將一個元素序列調(diào)整為按指定關(guān)鍵字值的遞增(或遞減)次序排列的有序序列。用分治法求解排序問題的思路是,按某種方式將序列分成兩個或多個子序列,分別進(jìn)行排序,再將已排序的子序列合并成一個有序序列。合并排序和快速排序是兩種典型的符合分治策略的排序算法。 2、如果采用順序存儲的可排序表作為算法實(shí)現(xiàn)的數(shù)據(jù)結(jié)構(gòu),則需要定義一個可排序表類SortableList,兩路合并算法和快速排序算法均由定義在該類上的函數(shù)實(shí)現(xiàn)。其中 Input函數(shù)和 Output函數(shù)分別用于向可排序表中輸入待排序序列,以及輸出已經(jīng)排序好的序列。3、兩路合并排序算法的基本思想是:將待
3、排序元素平分成大小大致相同的兩個子序列,然后對每個子序列分別使用遞歸的方法進(jìn)行兩路合并排序,直到子序列長度變?yōu)?,最后利用合并算法將得到的已排序好的兩個子序列合并成一個有序的序列。 兩路合并排序算法的核心部分是將子問題的解組合成原問題解得合并操作。常用的操作是新建一個序列,序列的大小等于要合并的兩個子序列的長度之和。比較兩個子序列中的最小值,輸出其中較小者到新建的序列中,重復(fù)此過程直到其中一個子序列為空。如果另一個子序列中還有元素未輸出,則將剩余元素依次輸出到新建序列中即可。最終得到一個有序序列。 4、結(jié)合書上已有的程序代碼,使用分治法的快速排序算法,實(shí)現(xiàn)對初始序列的排序。快速排序算法的基本思
4、想是:(1)在待排序序列 Kleft:right上選擇一個基準(zhǔn)元素(通常是最左邊的元素 Kleft),通過一趟分劃操作將序列分成左右兩個子序列,左子序列中所有元素都小于等于該基準(zhǔn)元素,有子序列中所有元素都大于等于該基準(zhǔn)元素。則當(dāng)前基準(zhǔn)元素所在的位置位于左、右子序列的中間,即是其排序完成后的最終位置。(2)通過遞歸調(diào)用,對左子序列和右子序列再分別進(jìn)行快速排序算法的調(diào)用。(3)由于每一趟分劃結(jié)束后,左子序列中的元素均不大于基準(zhǔn)元素,右子序列中的元素均不小于基準(zhǔn)元素。而每次分劃后,對分劃得到的左、右子序列的快速排序又均是就地進(jìn)行,所以一旦左、右兩個子序列都已分別排好序后,無需再執(zhí)行任何計(jì)算,整個序列
5、就是所要求的有序序列了。因此類中應(yīng)定義成員函數(shù) QuickSort來完成遞歸快速排序算法的調(diào)用和成員函數(shù)5、比較合并排序和兩種算法的異同。 問題分解過程: 合并排序?qū)⑿蛄幸环譃槎纯伞?(十分簡單) 快速排序需調(diào)用 Partition函數(shù)將一個序列劃分為子序列。(分解方法相對較困難)子問題解合并得到原問題解的過程:合并排序需要調(diào)用 Merge函數(shù)來實(shí)現(xiàn)。(Merge函數(shù)時間復(fù)雜度為O(n)).快速排序一旦左、右兩個子序列都已分別排序,整個序列便自然成為有序序列。(異常簡單,幾乎無須額外的工作,省去了從子問題解合并得到原問題解的過程) 基本程序(一) 兩路合并排序#include<iost
6、ream.h> class SortableList public: SortableList(int mSize) maxSize=mSize; l=new intmaxSize; n=0; SortableList() delete l; void MergeSort(); void Input(); void Output(); private: int *l; int maxSize; int n; void MergeSort(int left,int right); void Merge(int left,int mid,int right); void SortableLi
7、st:MergeSort() MergeSort(0,n-1); void SortableList:MergeSort(int left,int right) if (left<right) int mid=(left+right)/2; MergeSort(left,mid); MergeSort(mid+1,right); Merge(left,mid,right); void SortableList:Merge(int left,int mid,int right) int *temp=new intright-left+1; int i=left,j=mid+1,k=0; w
8、hile(i<=mid)&&(j<=right) if (li<=lj) tempk+=li+; else tempk+=lj+; while (i<=mid) tempk+=li+; while (j<=right) tempk+=lj+; for (i=0,k=left;k<=right;) lk+=tempi+;void SortableList:Input() for(int i=0;i<maxSize;i+) cin>>li; n+; void SortableList:Output() for(int i=0;i
9、<maxSize;i+) cout<<li<<" " cout<<endl; void main() SortableList l(10); cout<<"請輸入10個數(shù):"<<endl; l.Input(); l.MergeSort(); l.Output();(二)快速排序#include<iostream.h>class SortableListpublic: SortableList(int mSize) maxSize=mSize; l=new intmaxSize;
10、 n=0; SortableList() delete l; void QuickSort(); void Input(); void Output();private: int *l; int maxSize; int n;void Swap(int i,int j); void QuickSort(int left,int right);int Partition(int left,int right);void SortableList:Swap(int i,int j)int c=li;li=lj;lj=c;int SortableList:Partition(int left,int
11、 right)int i=left,j=right+1;dodo i+; while (li<lleft);do j-; while (lj>lleft);if (i<j) Swap(i,j);while (i<j);Swap(left,j);return j;void SortableList:QuickSort()QuickSort(0,n-1);void SortableList:QuickSort(int left,int right)if (left<right)int j=Partition(left,right);QuickSort(left,j-1);QuickSort(j+1,right);void SortableList:Input() for(int i=0;i<maxSize;i+) cin>>li; n+; void SortableList:Output() for(int i=0;i<maxSize;i+) cout<<li<<" " cout<
溫馨提示
- 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 荊州理工職業(yè)學(xué)院《中醫(yī)養(yǎng)生康復(fù)學(xué)》2023-2024學(xué)年第二學(xué)期期末試卷
- 山東省臨沂市莒南縣市級名校2024-2025學(xué)年初三模擬考試(二)英語試題試卷含答案
- 南寧學(xué)院《書法藝術(shù)》2023-2024學(xué)年第一學(xué)期期末試卷
- 江蘇農(nóng)牧科技職業(yè)學(xué)院《中醫(yī)典籍導(dǎo)讀》2023-2024學(xué)年第一學(xué)期期末試卷
- 2025年圖書館信息學(xué)專業(yè)考試試題及答案
- 2025年?duì)I銷專員職業(yè)能力考試試題及答案
- 2025年數(shù)字媒體藝術(shù)專業(yè)入學(xué)考試試卷及答案
- 四川傳媒學(xué)院《景觀設(shè)計(jì)方法Ⅰ》2023-2024學(xué)年第二學(xué)期期末試卷
- 內(nèi)蒙古科技大學(xué)《資源加工工程設(shè)計(jì)》2023-2024學(xué)年第一學(xué)期期末試卷
- 天津海運(yùn)職業(yè)學(xué)院《英語新聞選讀》2023-2024學(xué)年第一學(xué)期期末試卷
- 外貿(mào)英語詞匯
- 中級出版專業(yè)技術(shù)人員職業(yè)資格2025年筆試題庫附答案
- 2025年浙江省衢州市中考一模英語試題(原卷版+解析版)
- 專利代繳年費(fèi)合同協(xié)議
- 《騰訊戰(zhàn)略投資》課件
- 2024中國國新基金管理有限公司相關(guān)崗位招聘7人筆試參考題庫附帶答案詳解
- 2025屆浙江省杭州市高三下學(xué)期二模物理試題(原卷版+解析版)
- 登高車安全培訓(xùn)
- 成人重癥患者顱內(nèi)壓增高防控護(hù)理專家共識(2024版)解讀課件
- 在線監(jiān)測運(yùn)維管理體系
- 大型活動安全保障職責(zé)與分工
評論
0/150
提交評論