




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、實(shí)驗(yàn)報(bào)告(2016/2017學(xué)年第二學(xué)期)課程名稱(chēng)算法分析與設(shè)計(jì)實(shí)驗(yàn)名稱(chēng)分治策略實(shí)驗(yàn)時(shí)間2017年3月30日指導(dǎo)單位計(jì)算機(jī)學(xué)院軟件工程系指導(dǎo)教師張怡婷學(xué)生姓名霍淇濱班級(jí)學(xué)號(hào)學(xué)院(系)計(jì)算機(jī)學(xué)院專(zhuān) 業(yè)軟件工程實(shí)驗(yàn)報(bào)告實(shí)驗(yàn)名稱(chēng)分治策略指導(dǎo)教師張怡婷實(shí)驗(yàn)類(lèi)型驗(yàn)證型(第4個(gè)實(shí)驗(yàn)密 碼算法是“設(shè)計(jì)型”)實(shí)驗(yàn)學(xué)時(shí)2實(shí)驗(yàn)時(shí)間2017-3-30一、實(shí)驗(yàn)?zāi)康暮腿蝿?wù)理解分治法的算法思想,閱讀實(shí)現(xiàn)書(shū)上已有的部分程序代碼弁完善程序,加深對(duì)分治法的算法原理及實(shí)現(xiàn)過(guò)程的理解二、實(shí)驗(yàn)環(huán)境(實(shí)驗(yàn)設(shè)備)Visual Studio 2015三、實(shí)驗(yàn)原理及內(nèi)容(包括操作過(guò)程、結(jié)果分析等)一、用分治法實(shí)現(xiàn)一組無(wú)序序列的兩路合并排序和
2、快速排序。要求清楚合并排序及快速排序的基本原理,編程實(shí)現(xiàn)分別用這兩種方法將輸入的一組無(wú)序序列排序?yàn)橛行蛐蛄泻筝敵?。?biāo)頭.h#include<iostream> using namespace std;class SortableList public:SortableList(int mSize);SortableList();void Input();/ 輸入數(shù)組void Output。;/輸出數(shù)組void MergeSort();/兩路合并排序void QuickSort();/快速排序private:int *l;/數(shù)組指針int maxSize;/ 數(shù)組最大長(zhǎng)度int n;
3、/ 數(shù)組已有元素個(gè)數(shù)void MergeSort(int left, int right);void Merge(int left, int mid, int right);void Swap(int i, int j);/交換函數(shù)void QuickSort(int left, int right);int Parition(int left, int right);/分割函數(shù);SortableList:SortableList(int mSize) maxSize = mSize;l = new intmaxSize;n = 0;SortableList:SortableList() de
4、lete口l; void SortableList:Input() cout << "請(qǐng)輸入待排序的數(shù)組n"for (int i = 0; i < maxSize; i+) cin >> li;if (li = -1)break;n+;void SortableList:Output()for (int i = 0; i < n; i+) cout << li << ""void SortableList:MergeSort() MergeSort(0, n - 1); void Sortabl
5、eList:QuickSort() QuickSort(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
6、i = left, j = mid + 1, k = 0;while (i <= mid) && (j <= right)if (li <=加 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:Swap(int i, int j)int c = li;li = lj;lj = c
7、;void SortableList:QuickSort(int left, int right)if (left < right)int j = Parition(left, right);QuickSort(left, j - 1);QuickSort(j + 1, right);int SortableList:Parition(int left, int right)int i = left, j = right + 1;dodo i+; while (li < lleft);do j-; while (lj > lleft);if (i < j) Swap(i
8、, j); while (i < j);Swap(left, j);return j;源.app#include<iostream>#include"標(biāo)頭.h"using namespace std;void main()int n = 10;SortableList my1(n);SortableList my2(n);my1.Input();my2.Input();my1.MergeSort();my2.QuickSort();my1.Output();my2.Output();二、采用基于“五元中值組取中值分割法” (median-of-median
9、-of-fivepartitioning )的線性時(shí)間選擇算法,找出N個(gè)元素集合S中的第k個(gè)最小的元素,使其在線性時(shí)間內(nèi)解決。標(biāo)頭.h#include<iostream>using namespace std;enum ResultCode OutOfBounds,Success;class SortableListpublic:SortableList(int mSize);SortableList();void Input();void Output。;ResultCode Select(int &x, int k); private:int *l;int maxSiz
10、e;int n;void Swap(int i, int j);void InsertSort(int left, int right);int Partition(int left, int right);int Select(int k,int left,int right,int r);SortableList:SortableList(int mSize)maxSize = mSize;l = new intmaxSize;n = 0;SortableList:SortableList() deletel; void SortableList:Input()cout <<
11、"請(qǐng)輸入帶排序的數(shù)組n"for (int i = 0; i < maxSize; i+)cin >> li;if (li = -1) break;n+;void SortableList:Output()for (int i = 0; i < n; i+) cout << li << ""void SortableList:Swap(int i, int j)int c = li;li=皿;皿=c;int SortableList:Partition(int left, int right)int i =
12、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;ResultCode SortableList:Select(int &x, int k) if (n <= 0 | k > n | k <= 0)return OutOfBounds;int j = Select(k, 0,n - 1,5);x =皿;return Success
13、;int SortableList:Select(int k, int left, int right, int r) int n = right - left + 1;if (n <= r)/若問(wèn)題足夠小,使用直接插入排序InsertSort(left, right);return left + k - 1; / 取其中的第k小元素,其下標(biāo)為left+k-1for (int i = 1; i <= n / r; i+)InsertSort(left + (i - 1)*r, left + i*r - 1); /二次取中規(guī)則求每組的中間值Swap(left + i - 1, lef
14、t + (i - 1)*r + (int)ceil(double)r / 2) - 1); /將每組的中間值交換到子表前部集中存放 /求二次中間值,其下標(biāo)為j int j = Select(int)ceil(double)n / r / 2), left, left + (n / r) - 1, r);Swap(left, j);/二次中間值為樞紐元,并換至left處j = Partition(left, right); /對(duì)表(子表)進(jìn)行分劃操作if (k = j - left + 1)return j; / 返回第k小元素下標(biāo)else if (k<j - left + 1)return Select(k, left, j - 1, r);/在左子表求第 k小元素else return Select(k - (j - left + 1), j + 1, right, r); /在右子表求第 k-(j-left+1) 小元素void SortableList:InsertSort(int left, int right) for (int i = left+1; i <= right; i+) int j = i;int temp = li;while (j > left && temp < lj - 1)lj = lj - 1;
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 中國(guó)電池回收行業(yè)市場(chǎng)發(fā)展前景及發(fā)展趨勢(shì)與投資戰(zhàn)略研究報(bào)告(2024-2030)
- 2025年中國(guó)汽車(chē)?yán)o器行業(yè)市場(chǎng)發(fā)展前景及發(fā)展趨勢(shì)與投資戰(zhàn)略研究報(bào)告
- 2024年中國(guó)五金行業(yè)市場(chǎng)調(diào)查報(bào)告
- 攪拌站安全生產(chǎn)檢查記錄表
- 物業(yè)員工日常管理制度
- 員工崗位安全責(zé)任制
- 企業(yè)安全生產(chǎn)核心
- 辦理安全生產(chǎn)許可證收費(fèi)
- 2023-2029年中國(guó)冬瓜種植行業(yè)發(fā)展監(jiān)測(cè)及投資前景展望報(bào)告
- 2024-2030全球臺(tái)式細(xì)胞生物反應(yīng)器行業(yè)調(diào)研及趨勢(shì)分析報(bào)告
- 《神志病中西醫(yī)結(jié)合臨床診療指南抑郁障礙》
- 主持人服裝搭配課件
- 土木工程力學(xué)(本)-001-國(guó)開(kāi)機(jī)考復(fù)習(xí)資料
- 【MOOC】小白學(xué)Python-南京財(cái)經(jīng)大學(xué) 中國(guó)大學(xué)慕課MOOC答案
- 工業(yè)5G專(zhuān)網(wǎng)構(gòu)筑新質(zhì)生產(chǎn)力發(fā)展新優(yōu)勢(shì)
- 電線電纜生產(chǎn)常見(jiàn)質(zhì)量問(wèn)題改善與提升
- 2024-2030年中國(guó)倉(cāng)庫(kù)行業(yè)面臨的機(jī)遇與挑戰(zhàn)規(guī)劃研究報(bào)告
- 生態(tài)綠化修復(fù)項(xiàng)目投標(biāo)文件(技術(shù)方案)
- “學(xué)生中心”下的化學(xué)高效教學(xué)策略
- 污水處理廠化驗(yàn)室管理
- 四川省遂寧市(2024年-2025年小學(xué)四年級(jí)語(yǔ)文)人教版期末考試((上下)學(xué)期)試卷及答案
評(píng)論
0/150
提交評(píng)論