




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
算法分析與設(shè)計(jì)實(shí)驗(yàn)報(bào)告第2次實(shí)驗(yàn)姓名學(xué)號(hào)班級(jí)時(shí)間10.17上午地點(diǎn)工訓(xùn)樓309實(shí)驗(yàn)名稱利用分治法實(shí)現(xiàn)歸并排序算法實(shí)驗(yàn)?zāi)康耐ㄟ^上機(jī)實(shí)驗(yàn),要求掌握分治法解決問題,以及二路歸并算法的實(shí)現(xiàn)。實(shí)驗(yàn)原理使用分治法和二路歸并算法,根據(jù)不同的隨機(jī)數(shù)規(guī)模和數(shù)量,能準(zhǔn)確的輸出通過二路歸并排序后的數(shù)組,并計(jì)算出程序運(yùn)行所需要的時(shí)間。實(shí)驗(yàn)步驟①先輸入隨機(jī)數(shù)組的長(zhǎng)度和規(guī)模;②產(chǎn)生一個(gè)隨機(jī)數(shù)組;③計(jì)時(shí)開始,調(diào)用排序函數(shù);④輸出排序后的數(shù)組,輸出算法話費(fèi)的時(shí)間。關(guān)鍵代碼template<classT>//將b[0]至b[right-left+1]拷貝到a[left]至a[right]voidCopy(Ta[],Tb[],intleft,intright){intsize=right-left+1;for(inti=0;i<size;i++){a[left++]=b[i];}}//合并有序數(shù)組a[left:i],a[i+1:right]到b,得到新的有序數(shù)組btemplate<classT>voidMerge(Ta[],Tb[],intleft,inti,intright){inta1cout=left,//指向第一個(gè)數(shù)組開頭a1end=i,//指向第一個(gè)數(shù)組結(jié)尾a2cout=i+1,//指向第二個(gè)數(shù)組開頭a2end=right,//指向第二個(gè)數(shù)組結(jié)尾bcout=0;//指向b中的元素for(intj=0;j<right-left+1;j++)//執(zhí)行right-left+1次循環(huán){if(a1cout>a1end){b[bcout++]=a[a2cout++];continue;}//如果第一個(gè)數(shù)組結(jié)束,拷貝第二個(gè)數(shù)組的元素到bif(a2cout>a2end){b[bcout++]=a[a1cout++];continue;}//如果第二個(gè)數(shù)組結(jié)束,拷貝第一個(gè)數(shù)組的元素到bif(a[a1cout]<a[a2cout]){b[bcout++]=a[a1cout++];continue;}//如果兩個(gè)數(shù)組都沒結(jié)束,比較元素大小,把較小的放入belse{b[bcout++]=a[a2cout++];continue;}}}//對(duì)數(shù)組a[left:right]進(jìn)行合并排序template<classT>voidMergeSort(Ta[],intleft,intright){T*b=newint[right-left+1];if(left<right){inti=(left+right)/2;//取中點(diǎn)MergeSort(a,left,i);//左半邊進(jìn)行合并排序MergeSort(a,i+1,right);//右半邊進(jìn)行合并排序Merge(a,b,left,i,right);//左右合并到b中Copy(a,b,left,right);//從b拷貝回來}}測(cè)試結(jié)果實(shí)驗(yàn)心得通過這次實(shí)驗(yàn),我更加理解了分治法的策略和遞歸的調(diào)用。明白了二路歸并排序的實(shí)質(zhì)辦法??梢员容^在同樣數(shù)據(jù)規(guī)模的情況下,不加入隨機(jī)化過程和加入隨機(jī)化過程的運(yùn)行時(shí)間。特別是在數(shù)據(jù)基本有序的情況下,加入隨機(jī)化過程應(yīng)該能大大提高速度。計(jì)算算法運(yùn)行的時(shí)間和程序運(yùn)行的時(shí)間是不一樣的,剛開始我把計(jì)算算法運(yùn)行時(shí)間的函數(shù)start()的位置弄錯(cuò)了,自己不知道還是助教學(xué)長(zhǎng)的提醒,才知道自己的錯(cuò)誤,導(dǎo)致后面運(yùn)行的時(shí)候得出來的時(shí)間有7,8秒了,是把我的輸入的時(shí)間也算進(jìn)去了,沒有得到準(zhǔn)確的算法運(yùn)行時(shí)間。改變計(jì)算時(shí)間函數(shù)的位置后,算法運(yùn)行的時(shí)間才正確了。實(shí)驗(yàn)得分助教簽名附錄:完整代碼#include<time.h>#include<iostream>#include<iomanip>#include<stdlib.h>usingnamespacestd;template<classT>//將b[0]至b[right-left+1]拷貝到a[left]至a[right]voidCopy(Ta[],Tb[],intleft,intright){intsize=right-left+1;for(inti=0;i<size;i++){a[left++]=b[i];}}//合并有序數(shù)組a[left:i],a[i+1:right]到b,得到新的有序數(shù)組btemplate<classT>voidMerge(Ta[],Tb[],intleft,inti,intright){inta1cout=left,//指向第一個(gè)數(shù)組開頭a1end=i,//指向第一個(gè)數(shù)組結(jié)尾a2cout=i+1,//指向第二個(gè)數(shù)組開頭a2end=right,//指向第二個(gè)數(shù)組結(jié)尾bcout=0;//指向b中的元素for(intj=0;j<right-left+1;j++)//執(zhí)行right-left+1次循環(huán){if(a1cout>a1end){b[bcout++]=a[a2cout++];continue;}//如果第一個(gè)數(shù)組結(jié)束,拷貝第二個(gè)數(shù)組的元素到bif(a2cout>a2end){b[bcout++]=a[a1cout++];continue;}//如果第二個(gè)數(shù)組結(jié)束,拷貝第一個(gè)數(shù)組的元素到bif(a[a1cout]<a[a2cout]){b[bcout++]=a[a1cout++];continue;}//如果兩個(gè)數(shù)組都沒結(jié)束,比較元素大小,把較小的放入belse{b[bcout++]=a[a2cout++];continue;}}}//對(duì)數(shù)組a[left:right]進(jìn)行合并排序template<classT>voidMergeSort(Ta[],intleft,intright){T*b=newint[right-left+1];if(left<right){inti=(left+right)/2;//取中點(diǎn)MergeSort(a,left,i);//左半邊進(jìn)行合并排序MergeSort(a,i+1,right);//右半邊進(jìn)行合并排序Merge(a,b,left,i,right);//左右合并到b中Copy(a,b,left,right);//從b拷貝回來}}intmain(){while(1){intn;intf;cout<<"請(qǐng)輸入您將要排序的數(shù)目:";cin>>n;cout<<"請(qǐng)輸入隨機(jī)數(shù)的規(guī)模:";cin>>f;int*a=newint[n];cout<<"產(chǎn)生的隨機(jī)數(shù):";//取隨機(jī)數(shù)srand((unsigned)time(NULL));for(inti=0;i<n;i++){a[i]=(rand()%(f)+0);cout<<a[i]<<'';}//計(jì)時(shí)開始clock_tstart,end,over;start=clock();end=clock();over=end-start;start=clock();MergeSort(a,0,n-1);cout<<endl;cout<<"排序結(jié)果:";
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 咖啡豆與茶葉知識(shí)培訓(xùn)
- 大學(xué)生校園歌手大賽觀后感
- 湖北省武漢市常青聯(lián)合體2024-2025學(xué)年高二上學(xué)期期末聯(lián)考地理試題 含解析
- 商務(wù)往來文件處理規(guī)范
- 活動(dòng)現(xiàn)場(chǎng)照片登記表
- 小學(xué)生思維導(dǎo)圖征文
- 供應(yīng)鏈采購協(xié)議細(xì)則
- 人才需求及就業(yè)前景分析表
- 貝雷片租賃合同
- 年度項(xiàng)目工作計(jì)劃與執(zhí)行監(jiān)控報(bào)告
- 雙新背景下小學(xué)英語單元整體作業(yè)設(shè)計(jì)與優(yōu)化探索 論文
- 大學(xué)生勞動(dòng)教育教程全套PPT完整教學(xué)課件
- GB/T 985.1-2008氣焊、焊條電弧焊、氣體保護(hù)焊和高能束焊的推薦坡口
- GB/T 15970.7-2000金屬和合金的腐蝕應(yīng)力腐蝕試驗(yàn)第7部分:慢應(yīng)變速率試驗(yàn)
- 中共一大會(huì)址
- 制度經(jīng)濟(jì)學(xué):05團(tuán)隊(duì)生產(chǎn)理論
- 作文格子紙(1000字)
- 刻度尺讀數(shù)練習(xí)(自制)課件
- 四年級(jí)下冊(cè)美術(shù)課件 4紙卷魔術(shù)|蘇少版
- 七年級(jí)數(shù)學(xué)蘇科版下冊(cè) 101 二元一次方程 課件
- ZL50裝載機(jī)工作裝置設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論