版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
WordWord資料教據(jù)結(jié)構(gòu)實殮掖告賓絵題目:幾科基本排序算出的實現(xiàn)班級: 計嵌151學(xué)號: ⑸3052017一、 矣絵目的賣現(xiàn)直樓插入排序,藥泡排序,簡單選擇排序,快速排序,希余排序,堆排序等6種常用部排序算法,比較各算法的比較次數(shù)和移動次數(shù)。二、 數(shù)據(jù)穗構(gòu)設(shè)計⑴設(shè)計待排序記錄的存儲結(jié)構(gòu)。⑵設(shè)計待排序數(shù)據(jù)的存儲■結(jié)構(gòu)。G)輸入:待排存數(shù)據(jù)的教據(jù)個數(shù)和數(shù)據(jù)可由錢盤輸入,也可由程序生成偽隨機數(shù),以菜單方式選擇上述排序方法中的一個,并指朗輸出第幾趟排序的結(jié)果。(4)輸出:各趟排序結(jié)果或指定趟的排序結(jié)果,以及對應(yīng)的關(guān)鍵字比較次數(shù)和移動次數(shù)。三、 算出段計與N巧圖算法設(shè)計:編寫一個主函教main(),在圭函數(shù)中設(shè)計一個簡單的菜單,分別調(diào)用6種部排序算出。為了對各種排序算法的性能進行比較,算法中的主要工作是柱己知算法的適.多住置插入對關(guān)絨字的比較次數(shù)和移動次數(shù)的計數(shù)襟作。為此,可設(shè)立一個賣現(xiàn)排序算法中的關(guān)鍵字比較的函數(shù);設(shè)立一個賣現(xiàn)排序算法中的關(guān)鍵字移動的函數(shù);設(shè)立一個賣現(xiàn)排序算法中的關(guān)鍵字交換的函教,從而鮮決比較次數(shù)和移動次數(shù)的統(tǒng)計問題。教據(jù)的輸入也可以通過萊單選擇輸入方式:鍵盤輸入或由偽隨機教程序生成數(shù)據(jù),以便隨肘靈換排序數(shù)據(jù),并按照不同要求對排序教據(jù)進行排序,輸出排序的結(jié)果以及對應(yīng)的關(guān)縫字比較次數(shù)和移動次數(shù)。對于測試教據(jù),算法中可以考虎?幾組數(shù)據(jù)的典型性,如正序,逆序和不同程度等,以取得直觀的感受,從而對不同算法進行比較。叫程序請車#include<iostream>usingnamespacestd;voidshowMenu()icout<<M*萊單伙"<<endl;cout<<M1?直接插入排序"vvendl;cout<<M2?冒電排序"<<endl;coutv<M3.簡單產(chǎn)擇排序"<<endl;cout<<M4?快速排序"<<endl;cout<<M5?希余排序"<<endl;cout<<M6?堆排序"<<endl;cout<<M7?退出程序"<<endl;}structSqLi$t{int伙key:intlength;};voidCreateSqList(SqList&l)//type為int{intn;cout<<M建立順序表”vvendl<<"情輸入順序表的云度”<<endl;cin>>n;sLIength=n;si.key=newint[sl」ength+1]:cout<<輸入救據(jù):11<<endl:for(inti=1;i<=siJength;i++){cin>>$Lkey[i];}}voidCopy(SqList&LLSqList&L2){L2.length=LI.length;L2.key=newint[L1.length+1]:for(inti=1;i<=LI.length;i++){L2.key[i]=L1.key[i];}}voidOutPut(SqList&L){for(intj=l;j<=Liength;++j)cout<<L.keyD]<<cout<<endl;}voidlnsertSort(SqList&L){//對順序表L作直接插入排序intk=0;intcompare_Time,move_Time;compare_Time=moveTime=0;for(inti=2:iv=L.length;i++){if(L.key[i]<=L?key[i?1])//”v"需將L?key[i]插入有序孑表{L.key[0]=L.key[i];〃復(fù)制為哨兵L.key[i]=L.key[i?1]:intj;for0=i-2:L.key[0]<=L.keyjj];-J)compare_Time++:L.keyD+1]=L.key[j]://記錄后移move_Time++;}"L.keyU+1]=L?key[O];〃插入刊正確住.査k++;cout<<案vvk<<"越排序結(jié),r;OutPut(L):}compare_Time++;}"cout<<"比較次數(shù)為:”vvcompareTime<<endl;cout<<"移動次數(shù)為:”vvmoveTime<<endl;}voidBubbleSort(SqLi$t&L){intk=0;intcompare_Time,move_Time;compareTime=moveTime=0;for(inti=1;ivL.length;i++)〃用i控制比較趙救共rvl趟{intt:for(intj=1;jv=L」ength?i;j++){compare_Time++;if(Lkey[j]>L.keyD+1])t=Lkey[j];L.keyD]=L.keyD+1]:L.keyD+1]=t;move_Time++;}"}k++;cout<<"第11<<k<<”趟排序結(jié)w;OutPut(L);}cout<<"比較次數(shù)為:M<<compareTime<<endl;cout<<"移動次數(shù)為:"vvmoveTime<<endl;}"intSelectMinKey(SqList&L,intn,int&compareTime){_intmin=n;intminkey;//最小值minkey=L.key[n];for(inti=n+1:i<=Liength;i++){if(L.key[i]<minkey){minkey=L.key[i];min=i;}compare_Time++;}"returnmin;}voidSelectSort(SqList&L){〃對順序表L作簡單選擇排序intj;intt;intk=0;intmoveTime=0,compareTime=0;for(inti=1;iv=L」ength;i++){j=SelectMinKey(L,Lcompare_Time);//^L.key[i]-L.key[L.length]中選擇最小的記錄并將?其地址賦給jif(i!=j)〃文換記錄{t=L.key[i];L.key[i]=L.keyjj]:L.keyD]=t;move_Time++:}_compare_Time++;k++;cout<<”弟”<<k<<”趟排序結(jié)果:h;OutPut(L):}cout<<“比較次數(shù)為:”vvcompareTime<<endl;cout<<"移動次數(shù)為:"vvmoveTime<<endl;}"intPartition(SqList&L,intlow,inthighjnt&compareTimeJnt&moveTime){//交換順序表L中孑表key[low]??key[high]中的記錄,樞軸記錄刊住,并國回其所淮.佞蓋?,〃此時疫乞之前(后)的記錄均不大(小丿于乞intpivotkey;L.key[O]=L?key[low];〃用孑表的弟一個記錄作相軸記錄pivotkey=L?key[low];〃關(guān)鍵字while(lowvhigh)//從表的兩端交棒向中冋扣描{compare_Time++;while(low<high&&L.key[high]>=pivotkey)-high;L.key[low]=L.key[high]:move_Time++;//^-比樞軸小的記錄移至低躊while(low<high&&L.key[low]<=pivotkey)++low;L.key[high]=L.key[low]://4f比樞軸大的記錄移至爲端move_Time++;}"L.key[low]=L?key[O];〃樞軸記錄刊住returnlow;//遍回樞軸住}voidQSort(SqList&L.intlow.inthighjnt&&compare_Time,int&moveTime){""intmid://接收樞軸伐..炭if(low<high){mid=Partition(L、low.high,compare_Time,move_Time);k++;cout<<"第"<<k<<”趙排序結(jié)果:';OutPut(L);QSort(Llow,mid-l,k,compare_Time,move_Time)://對低孑表進行排序QSort(L,mid+Lhigh,k.compareTime,moveTime);//對為孑表進行排序}}voidQuitSort(SqList&L)〃對順序表進行快遠排序{intk=0;intcompare_Time=0.moveTime=0;QSort(L,1,L」ength,pare_Time.move_Time);cout<<"比較次數(shù)為:n<<compareTime<<endl;cout<<"移動次數(shù)為moveTime<<endl;voidShelllnsert(SqLi$t&L.intdk,int&compareTime.int&move_Time){//對順序表進行一越希余插入排序for(inti=dk+1;iv=L.length;i++)if(L.key[i]<=L.key[i-dk])compare_Time++;L.key[O]=L.key[i];intj:for(j=i-dk;j>0&&L.key[O]<=L.key[j];j-=dk){compare_Time++:L.keyO+dk]=L.keyfj]:move_Time++:}_L.keyp+dk]=L.keyfO];}}voidShellSort(SqLi$t&L.intdlta[],intt){intcompare_Time=0.moveTime=0;〃按增量序列dl[0]-dl[t-1]對順序表L作冰希排序for(intk=0;k<t;k++){Shelllnsert(L.dlta[k],compareTime.move_Time);cout<<”弟"<<k+l<<11趟排序結(jié)w;OutPut(L):}cout<<"比較次數(shù)為:n<<compareTime<<endl;cout<<M移動次數(shù)為:"vvmoveTime<<endl;}voidHeapAdjust(SqList&L.ints,intm,int&compareTime,int&moveTime){//對順序表做杳找,從值最大的舷孑結(jié)點向下笄選找刊最大值intrc=L.key[s];for(intj=2比$;jv=m;j克=2){訐(jvm&&L?key[j]<=L.keyD+1])//找刊值柯對較大的農(nóng)孑結(jié)點,并依次向下{j++;}compare_Time++;訐(roL.keyDJ)break;//如果rc最丸刖推出while循環(huán)L.key[s]=L.keyjj];//最大值賦值s=j;〃交換住査move_Time++;}"L.key[s]=rc;}voidHeapSort(SqList&L){//對順序表Lit行堆排序intvaluej;intk=0;intcompare_Time=0.moveTime=0;for(i=L.length/2;i>0;i??)〃把L?key[1?.丄.length]調(diào)整為大頂堆HeapAdjust(L,i.L」ength.compareTime.moveTime);for(i=L」ength:i>l;-i){value=L.key[l];L.key[1]=L.key[i];L.key[i]=value;HeapAdjust(L,U-LcompareTime,moveTime);//將L?key[1…i?1]重新調(diào)整為大頂堆k++;cout<<”第”<<k<<”趙排序結(jié)果:";OutPut(L);}cout<<“比較次數(shù)為:”vvcompareTime<<endl;cout<<"移動次數(shù)為:"vvmoveTime<<endl;}"intmain(){intchoice;SqListsq.sp;CreateSqList(sq);Copy(sq.sp):showMenuf);cout<<Tleaseenteryourchoice:":dn>>choice;while(choice!=0){switch(choice)case1:lnsertSort(sq);cout<<,r最終結(jié)果:OutPut(sq);break;case2:BubbleSort(sq);cout<<"最終結(jié)果:”;OutPut(sq);break;case3:SelectSort(sq);cout<<"最終結(jié)果:,r;OutPut(sq);break;case4:QuitSort(sq);cout<<,r最終結(jié)果:";OutPut(sq);break;case5:intpn:cout<<輸入增量個數(shù):"vvendl:cin>>n;p=newint[n];cout<<輸入各個增量的值:M<<endl;for(inti=0;ivn;i++){cin>>p[i];}ShellSort(sq,p.n);cout<<"最終結(jié)果:":OutPut(sq);break;case6:HeapSort(sq);cout<<"最終結(jié)果:";OutPut(sq);break;case7:cout<<M程序運行結(jié)束,退出程序。M<<endl;return0;break;}Copy(sp,sq):showMenuO:cout<<"Pleaseenteryourchoice:M;cin>>choice;}return0;}五、運行與測誠建立順序表諳侖入順序表的卡和輸入數(shù)據(jù):4257183:度*菜單1?直接插入:2肩泡排序?簡單選擇:?快速排床?希爾排序6攤排序7?退出程序龍「13“triieryo>第1攤排庫結(jié)果::第2超排庫結(jié)果:第2趙排序結(jié)果;比姣次逆為:14jrcr<711〉IC匕1422543754115887338樓動次數(shù)為:8最線給果:1234578SIG\WINDOWS\system32\cmd.exe5143332^441222lchoic60序序*排排召入序#序序fy P描排選排排序程r果杲果果果果:、井接泡單速爾排出ie結(jié)結(jié)結(jié)結(jié)結(jié),結(jié)杖為*亙冒簡快希堆退erl序序序序序序貯眇花1234567—曲理越趙趙趙越旳肪蜓el?.345一Iph第第第笫第第比移最u222序yo 2219t.非1H疋序擇序序庫2 牯M排選排排序程rl果
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 學(xué)校圖書閱覽室管理制度范文
- 消防隊籃球賽題目及答案
- 浙江中醫(yī)藥藥學(xué)題目及答案
- 養(yǎng)老院老人生活照料服務(wù)規(guī)范制度
- 養(yǎng)老院老人緊急救援人員職業(yè)發(fā)展規(guī)劃制度
- 體育賽事面試題目及答案
- 教招編制考試題目及答案
- 辦公室員工工作環(huán)境改善制度
- 鐵路營業(yè)線施工三會制度
- 進貨檢驗驗收制度
- 成都市高新區(qū)2025-2026學(xué)年七年級上數(shù)學(xué)期末試題及答案
- DB45∕T 2364-2021 公路路基監(jiān)測技術(shù)規(guī)范
- 智能客戶服務(wù)實務(wù)-教案
- 2025年云南省中考數(shù)學(xué)真題試卷及答案
- 2022危險廢物管理計劃和管理臺賬制定技術(shù)導(dǎo)則
- CISP(CISO與CISE)題庫及答案解析(700道)
- 《CAD的簡介和作用》課件
- 配電箱移交協(xié)議書模板
- 2024-2030年中國桉葉(油)素市場專題研究及市場前景預(yù)測評估報告
- 攝像機基礎(chǔ)知識攝像機基礎(chǔ)知識
- 齒軌卡軌車資料
評論
0/150
提交評論