




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(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)告一、實(shí)驗(yàn)內(nèi)容:題目:1、編程實(shí)現(xiàn)常見(jiàn)排序算法,如插入排序、歸并排序、快速排序、隨機(jī)化的快速排序等,并統(tǒng)計(jì)不同輸入規(guī)模下(1組從小到大排序,1組從大到小排序,其余8組隨機(jī))的平均物理執(zhí)行時(shí)間。2、編程實(shí)現(xiàn)循環(huán)賽日程表設(shè)有n=2k個(gè)運(yùn)動(dòng)員要進(jìn)行網(wǎng)球循環(huán)賽,先要設(shè)計(jì)一個(gè)滿(mǎn)足一下要求的比賽日常表:(1)每個(gè)選手必須與其他n-1個(gè)選手各賽一次(2)每個(gè)選手一天只能賽一次(3)循環(huán)賽一共進(jìn)行n-1天二、核心代碼說(shuō)明:sort.htemplate<classtype>structSqList{ type*key; intlength;};template<classtype>voidCreateSqList(SqList<type>&sl)//type為int{ intn; cout<<"請(qǐng)輸入順序表的長(zhǎng)度"<<endl; cin>>n; sl.length=n; sl.key=newint[sl.length+1]; assert(sl.key); srand(time(0)); for(inti=1;i<=sl.length;i++) { sl.key[i]=rand(); }}template<classtype>voidOutPut(SqList<type>&L){ for(intj=1;j<=L.length;++j) cout<<L.key[j]<<"\t"; cout<<endl;}//折半插入排序template<classtype>voidBInsertSort(SqList<type>&L){ inthigh,low,m; for(inti=2;i<=L.length;i++) { L.key[0]=L.key[i];//將L.key[i]暫存到L.key[0] low=1; high=i-1; while(low<=high)//在key[low]到key[high]中折半查找有序插入的位置 { m=(low+high)/2;//折半 if(L.key[0]<=L.key[m]) high=m-1;//插入低半?yún)^(qū) else low=m+1;//插入高半?yún)^(qū) } for(intj=i-1;j>=high+1;--j) L.key[j+1]=L.key[j];//記錄后移 L.key[high+1]=L.key[0];//插入 }}//歸并排序template<classtype>voidMerge(type*SR,type*TR,inti,intm,intn){//將有序的SR[i...m]和SR[m+1...n]歸并為有序的TR[i...n] intj,k; for(j=m+1,k=i;i<=m&&j<=n;k++)//將SR中的記錄由大到小并入TR { if(SR[i]<=SR[j]) TR[k]=SR[i++]; else TR[k]=SR[j++]; } if(i<=m)//將剩余的SR[i...m]賦值到TR for(inta=i;a<=m;a++) TR[k++]=SR[a]; elseif(j<=n)//將剩余的SR[j...n]復(fù)制到TR for(intb=j;b<=n;b++) TR[k++]=SR[b];}template<classtype>voidMSort(type*SR,type*TR1,ints,intt){ typeTR2[100000];//數(shù)組大小可以根據(jù)實(shí)際情況重新定義 intm; //將SR[s...t]歸并排序?yàn)門(mén)R[s...t] if(s==t) TR1[s]=SR[s]; else { m=(s+t)/2;//將SR[s...t]平分為SR[s...m]和SR[m+1...t] MSort(SR,TR2,s,m);//遞歸地將SR[s...m]歸并為有序的TR2[s...m] MSort(SR,TR2,m+1,t);//遞歸地將SR[m+1...t]歸并為T(mén)R2[m+1...t] Merge(TR2,TR1,s,m,t);//將TR2[s...m]和TR2[m+1...t]歸并到TR1[s...t] }}template<classtype>voidMergeSort(SqList<type>&L){//對(duì)順序表L作歸并排序 MSort(L.key,L.key,1,L.length);}//快速排序template<classtype>intPartition(SqList<type>&L,intlow,inthigh){//交換順序表L中子表key[low]--key[high]中的記錄,樞軸記錄到位,并返回其所在位置,//此時(shí)在它之前(后)的記錄均不大(?。┯谒?typepivotkey; L.key[0]=L.key[low];//用子表的第一個(gè)記錄作樞軸記錄 pivotkey=L.key[low];//關(guān)鍵字 while(low<high)//從表的兩端交替向中間掃描 { while(low<high&&L.key[high]>=pivotkey)--high; L.key[low]=L.key[high];//將比樞軸小的記錄移至低端 while(low<high&&L.key[low]<=pivotkey)++low; L.key[high]=L.key[low];//將比樞軸大的記錄移至高端 } L.key[low]=L.key[0];//樞軸記錄到位 returnlow;//返回樞軸位置}template<classtype>voidQSort(SqList<type>&L,intlow,inthigh){ intmid;//接收樞軸位置 if(low<high) { mid=Partition(L,low,high); QSort(L,low,mid-1);//對(duì)低子表進(jìn)行排序 QSort(L,mid+1,high);//對(duì)高子表進(jìn)行排序 }}template<classtype>voidQuitSort(SqList<type>&L)//對(duì)順序表進(jìn)行快速排序{ QSort(L,1,L.length);}Sort.cppvoidmain(){ SqList<int>sl; LONGLONGstart1,finish1,start2,finish2,start3,finish3; CreateSqList(sl); start1=GetTickCount(); BInsertSort(sl); finish1=GetTickCount(); deletesl.key; cout<<"插入排序平均物理執(zhí)行時(shí)間為"<<finish1-start1<<"ms"<<endl; CreateSqList(sl); start3=GetTickCount(); QuitSort(sl); finish3=GetTickCount(); deletesl.key; cout<<"快速排序平均物理執(zhí)行時(shí)間為"<<finish3-start3<<"ms"<<endl; CreateSqList(sl); start2=GetTickCount(); MergeSort(sl); finish2=GetTickCount(); deletesl.key; cout<<"歸并排序平均物理執(zhí)行時(shí)間為"<<finish2-start2<<"ms"<<endl;}richengbiao.cppintmain(void){ intk; cout<<"輸入k值,且運(yùn)動(dòng)員數(shù)為2^k:"<<endl; cin>>k; intn=1; for(inti=1;i<=k;i++) n*=2; intplayers=n; inta[100][100]; for(inti=1;i<=n;i++) { a[1][i]=i; } intm=1; for(ints=1;s<=k;s++) { n/=2; for(intt=1;t<=n;t++) for(inti=m+1;i<=2*m;i++) for(intj=m+1;j<=2*m;j++) { a[i][j+(t-1)*m*2]=a[i-m][j+(t-1)*m*2-m]; a[i][j+(t-1)*m*2-m]=a[i-m][j+(t-1)*m*2]; } m*=2; } for(inti=1;i<=players;i++) { for(intj=1;j<=players;j++) cout<<a[i][j]<<""; cout<<endl; } return0;}三、測(cè)試結(jié)果:題目一先把每個(gè)算法的排序時(shí)間得到:再做成表格:算法10001000050000100000插入排序16ms78ms1797ms7484ms歸并排序0ms0ms20ms56ms快速排序0ms0ms16ms32ms題目二四、心得與體
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 電子商務(wù)園區(qū)場(chǎng)地租賃及網(wǎng)絡(luò)接入服務(wù)合同
- 車(chē)輛貨物運(yùn)輸合同范本(含貨物運(yùn)輸全程跟蹤)
- 怎樣砸金蛋活動(dòng)方案
- 息縣入鄉(xiāng)隨俗活動(dòng)方案
- 悅翔限時(shí)活動(dòng)方案
- 情侶篝火活動(dòng)方案
- 情感問(wèn)答抽獎(jiǎng)活動(dòng)方案
- 驚喜app活動(dòng)方案
- 惠山區(qū)火焰切割活動(dòng)方案
- 惠州進(jìn)社區(qū)活動(dòng)方案
- 育嬰員考試題型及答案
- 科室建立血糖管理制度
- 四川成都東方廣益投資有限公司下屬企業(yè)招聘筆試題庫(kù)2025
- 華為公司試用期管理制度
- 保險(xiǎn)合規(guī)知識(shí)課件
- 2025-2030中國(guó)云原生保護(hù)平臺(tái)組件行業(yè)前景趨勢(shì)與投資盈利預(yù)測(cè)報(bào)告
- 商業(yè)大廈機(jī)電系統(tǒng)調(diào)試
- 2025企業(yè)并購(gòu)合同協(xié)議模板
- 【恒順醋業(yè)公司基于杜邦分析的盈利能力淺析14000字論文】
- 電網(wǎng)技術(shù)改造及檢修工程定額和費(fèi)用計(jì)算規(guī)定2020 年版答疑匯編2022
- 2025年生態(tài)文明建設(shè)的考核試卷及答案
評(píng)論
0/150
提交評(píng)論