版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、實(shí)驗(yàn)7:內(nèi)部排序算法比較一、問題描述程序?qū)σ韵?種內(nèi)部排序(冒泡排序、直接插入排序、簡單選擇排序、快速排 序)算法進(jìn)行實(shí)測(cè)比較,測(cè)試各種算法在對(duì)同樣的數(shù)據(jù)排序時(shí)的比較次數(shù)和移動(dòng)次 數(shù)。二、輸入與輸出輸入:根據(jù)用戶需要輸入待排表的表長(100至1000)和不同測(cè)試數(shù)據(jù)的組數(shù) (8至18),不輸入則按照默認(rèn)值進(jìn)行測(cè)試輸出:每次測(cè)試完畢,列表顯示各種比較指標(biāo)值:比較次數(shù)和移動(dòng)次數(shù) 二、需求分析.本演示程序?qū)σ韵?種常見的內(nèi)部排序算法進(jìn)行實(shí)測(cè)比較:冒泡排序、直接插入 排序、簡單選擇排序、快速排序.待排序表的元素的關(guān)鍵字為整數(shù)。用正序、逆序和不同亂序程度的不同數(shù)據(jù)做測(cè) 試比較。比較的指標(biāo)為由關(guān)鍵字參加的
2、比較次數(shù)和關(guān)鍵字的移動(dòng)次數(shù)(關(guān)鍵字交換計(jì)為3次移動(dòng)).演示程序以用戶和計(jì)算機(jī)的對(duì)話方式執(zhí)行,即在計(jì)算機(jī)終端上菜單,根據(jù)用戶需 要輸入待排表的表長(100至1000)和不同測(cè)試數(shù)據(jù)的組數(shù)(8至18), 不輸入則按照默認(rèn)值進(jìn)行測(cè)試。四、開發(fā)工具與環(huán)境硬件設(shè)備:微型計(jì)算機(jī)系統(tǒng)軟件環(huán)境:操作系統(tǒng) Windows,開發(fā)工具Devc+五、功能分析存儲(chǔ)結(jié)構(gòu)typedef int Typekey;typedef struct Typekey key;Type;typedef struct Type rMAXSIZE+1;/ 順序表int length;PList;/排序表函數(shù)一覽表int OneTimeSqC
3、reate(PList &L)/*手動(dòng)輸入創(chuàng)建排序序列函數(shù)*/int ManyTimeSqCreate(PList &L,int m)/*自動(dòng)生成排序序列函數(shù) */void BubbleSort(PList &L)/*冒泡排序*/void InsertSort(PList &L)/*插入排序*/void SelectSort(PList &L)/*簡單選擇排序*/int Partition(PList &L,int l ow,int high)/* 一次快速排序*/void QSort(PList &L,int l ow,int high)/*遞歸形式的快速排序算法*/ void QuickS
4、ort(PList &L)/*快速排序*/六、程序代碼#include #include #include #include #define MAXSIZE 10000 using namespace std; typedef int Typekey;/關(guān)鍵字的比較次數(shù)/關(guān)鍵字的移動(dòng)次數(shù)int compCount;int shiftCount;typedef struct Typekey key;Type;typedef struct Type rMAXSIZE+1;/ 順序表 int length;PList;/排序表int OneTimeSqCreate(PList &L)/手動(dòng)輸入創(chuàng)建排
5、序序列函數(shù)int x,h;for ( x=1; 1; x+)cinh;L.rx.key=h ;if(getchar()=n)/只讀入一行,換行則終止break;L.length=x;int ManyTimeSqCreate(PList &L,int m)/自動(dòng)生成排序序列函數(shù)L.length=m;for (int x=1; x=m; x+)L.rx.key= rand() % m;/隨機(jī)數(shù)的取值范圍為0kreturn 1;void BubbleSort(PList &L) /冒泡排序int i,j,l,m=0,n=0;for(i=1;i=L.length-1;+i)/只需要比較 length-
6、1 次for(j=1;jL.rj+1.key)l=L.rj.key;L.rj.key=L.rj+1.key;L.rj+1.key=l;n+=3;/關(guān)鍵字移動(dòng)次數(shù) coutendl冒泡排序:;cout比較次數(shù):m;cout交換次數(shù):nendl;void InsertSort(PList &L)/插入排序int i,j,m=0,n=0;/m是比較次數(shù),n是交換次數(shù)coutendl;for(i=2;i=L.length;+i)if(L.ri.keyL.ri-1.key)+m;/比較次數(shù)加1n+=3;/移動(dòng)次數(shù)加3 ,按實(shí)驗(yàn)報(bào)告要求一次交換代表3次移動(dòng)L.r0=L.ri;/設(shè)置哨兵L.ri=L.ri-
7、1;/后移一位for(j=i-2;L.r0.keyL.rj.key;-j)/ 一直找到該插入的位置 ( +m;/ L.rj+1=L.rj;/后移元素L.rj+1=L.r0;/將哨兵也就是原來的Li插入序列 cout直接插入排序:;cout比較次數(shù):m;cout交換次數(shù):nendl; void SelectSort(PList &L) / 簡單選擇排序int l,i,j,m=0,n=0;/m是比較次數(shù),n是移動(dòng)次數(shù)coutendl;for(i=1;iL.length;+i)L.r0=L.ri;j=i+1;/從j開始尋找最小元素 l=i;/l是最小元素的位置 for(j;jL.rj.key)/ 表
8、明 j 處 key 值更小 l=j;/記錄下j的值 L.r0=L.rj; if(l!=i)/需要交換位置n+=3;/移動(dòng)次數(shù)加3 ,按實(shí)驗(yàn)報(bào)告要求一次交換代表3次移動(dòng)L.rl=L.ri;L.ri=L.r0;cout簡單選擇排序:;cout比較次數(shù):m;cout交換次數(shù):nendlendl;int Partition(PList &L,int l ow,int high)/一次快速排序int pivotkey;/ 中間軸L.r0=L.rl ow;/ 記錄軸元素pivotkey=L.rl ow.key;/ 軸取 low while(l owhigh)while(l ow=pivotkey) +co
9、mpCount; 比較次數(shù)加1 -high;/high 左移shiftCount+=3;/移動(dòng)次數(shù)加3 ,按實(shí)驗(yàn)報(bào)告要求一次交換代表3次移動(dòng)L.rlow=L.rhigh;/此時(shí)應(yīng)當(dāng)交換位置while(l owhigh&L.rl ow.key=pivotkey)+compCount;/比較次數(shù)加1 +low;shiftCount+=3;移動(dòng)次數(shù)加3 ,按實(shí)驗(yàn)報(bào)告要求一次交換代表3次移動(dòng)L.rhigh=L.rl ow;L.rl ow=L.r0;/找到位置插入軸元素return l ow;/返回位置void QSort(PList &L,int l ow,int high)/ 遞歸形式的快速排序算法
10、int Piv;/軸元素位置if(l owhigh)Piv=Partition(L,l ow,high);QSort(L,l ow,Piv-1);/ 左遞歸QSort(L,Piv+1,high);/ 右遞歸void QuickSort(PList &L)/快速排序int i;QSort(L,1,L.length);cout 快速辯序:;cout比較次數(shù):compCount;cout交換次數(shù):shiftCountendlendl;compCount=0;shiftCount=0;int main()int i,k,h,n,m;PList L,alist,blist,clist,dlist;cou
11、t排序模式選擇 endl;couth;if(h=1)/手動(dòng)輸入模式OneTimeSqCreate(L);alist=blist=clist=dlist=L;BubbleSort(L);InsertSort(alist);SelectSort(blist);QuickSort(clist);cout排序后序列:;for(i=1;i=L.length;i+)cout L.ri.key;else/自動(dòng)生成模式coutnm;k=1;while(k+=n)coutendl第k-1次排序endl;ManyTimeSqCreate(L,m);alist=blist=clist=dlist=L;BubbleS
12、ort(L);InsertSort(alist);SelectSort(blist);QuickSort(clist);return 0;七、運(yùn)行測(cè)試1、手動(dòng)輸入遞增序列1 2 3 4 5 6 7 8 9S3C:Usersapple-pcDesktopzhr_test.exe二34H磊晶瞿而耍震睛星麗而切一 123456789冒泡排序二比較次數(shù)門6交換次數(shù)二E直接插入排序二比較次數(shù)蹲 交換次數(shù)簡單選擇排序,比較次數(shù)二6交換次數(shù)快速排序,比較次如6交換我數(shù)川排序后序列;123456789Process exited after 10.11 seconds with return ualue 0請(qǐng)
13、按任意鍵繼續(xù).-.1、手動(dòng)輸入遞減序列9 8 7 6 5 4 3 2 1C:Usersapple-pcDesktopzhr,test.exe【苴蔽羸嘉易誓原穎一987654321冒泡排序;比較次數(shù)交換次數(shù)江刖 直接插入排序:比較次數(shù)66交換次數(shù):24 簡單選擇排序:比較次數(shù)=36交換次數(shù):12 快速排序:比較次數(shù)交換次數(shù):48排序后序列1123456789Process exited after 9 _704 seconds uith return value 0請(qǐng)按任意鍵繼續(xù).3.生成隨機(jī)序列8組,每一個(gè)測(cè)試序列的表長度為100 得到測(cè)試結(jié)果如下表所示組數(shù)1234排序算法比較次數(shù)交換次數(shù)比較
14、次數(shù)交換次數(shù)比較次數(shù)交換次數(shù)比較次數(shù)交換次數(shù)冒泡排序49507827495076234950693049507407直接插入排序2609273254127623102702469285簡單選擇排序4950282495028249502854950291快速排序587984660948669930675930組數(shù)5678排序算法比較次數(shù)交換次數(shù)比較次數(shù)交換次數(shù)比較次數(shù)交換次數(shù)比較次數(shù)交換次數(shù)冒泡排序49507467495066544950719449507479直接插入排序2489291221827923982882493285簡單選擇排序4950273495027349502854950273
15、快速排序596924623918630978677954可以得到4種排序算法的平均比較和移動(dòng)次數(shù)如下表排序算法平均比較次數(shù)關(guān)鍵字平均移動(dòng)次數(shù)冒泡排序49507216直接插入排序2398282簡單選擇排序4950279快速排序633936可以看出快速排序的平均比較次數(shù)最少,而直接插入排序和簡單選擇排序的平均移動(dòng)次數(shù)最少,綜合看來對(duì)于一般的無序序列,快速排序是這4種算法里面性能最優(yōu)的一種。C:Usersap pie- pcDes ktc ,C:Use rsa pple- pcDeskti二排序模再固擇一 騰懿I熱!:號(hào)需你生成5在排序一冒泡排序工比較次數(shù)7%日交換次數(shù),曲7冒泡排序;比較次教”9函
16、交換次數(shù)直接插入排序:百次數(shù)二班制交揀次數(shù)嚙73 簡單選擇排序;比較次數(shù):皿0交換次數(shù),加2 快速排序上比較次數(shù)需87交換次數(shù)門84直援插入排序工比較欣數(shù); 2489交換吠數(shù)/久 簡單選擇排序:比較次數(shù)二4鷗3交換次數(shù)式73 快速排序;比較次數(shù)活6交換次數(shù):924第a次排序昌泡排序:比較次數(shù):呼513交換次數(shù)/623第G次排序冒泡排序;比較次數(shù):49/交換次數(shù)直接插入排序:比較次數(shù)姿ZLH交換欽敵花內(nèi)簡單選擇排序:比較就數(shù)二皿5。交換詼:數(shù)二”3直接插入排序:次敝二弱也交換我數(shù)47G簡單選擇排序:比較次數(shù):陰S B交換次數(shù);2S2快速排序入匕較次數(shù)遇23交換次敬日第7次排序快速排序止匕較次數(shù);
17、言日交換次敝吟帖第口次排序冒泡排序:比較次數(shù)上曲爾交換次數(shù):6?3 H直接插入排序:比較次數(shù)=蝠1。交換次數(shù)仍簡單選擇排序:捌次數(shù):幻5。交損次數(shù):加5冒泡排序讓戢次教M?5日交換次數(shù)eiM直接插入排序工比較次數(shù)地39&交換狀數(shù)二流& 簡單選擇排序工比較次數(shù)=坐錨 交換次數(shù)壯居快速排序;比較次數(shù)溫3H交換次數(shù):M8快速排序=比較懈緒5交換次數(shù)方3口第4次排序冒泡排序;比較次數(shù)交換次數(shù)中如7直接插入排序:比較次數(shù)二交換次數(shù)骷第R次排序冒泡排序;比較校數(shù)乂交摭次數(shù):T4R直接插入排序:比較我數(shù)h4盯 交換就數(shù):WU5簡單選擇排序讓匕較次數(shù)X95。交換次數(shù)盹?3快速排序工比較次麴需?7交換次數(shù)b54簡單選擇排序:朧次數(shù)二師5 g交揀次敝空汽 快速排序;比較次數(shù)/明交換次數(shù)少口自pHdceg exited a
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 動(dòng)物產(chǎn)科學(xué)模擬習(xí)題及答案
- Unit 8 Knowing the world Lesson 2 My home country英文版說課稿 -2024-2025學(xué)年冀教版(2024)七年級(jí)英語上冊(cè)
- 2025年大班年級(jí)組工作計(jì)劃示例
- 2025年醫(yī)院醫(yī)師工作計(jì)劃
- 2025年開學(xué)學(xué)期教師工作計(jì)劃
- 2025年高校工會(huì)工作計(jì)劃
- 2025年幼兒園園長工作計(jì)劃表
- 2025年物業(yè)下半年工作計(jì)劃
- Unit 1 What's he like?(說課稿)-2024-2025學(xué)年人教版PEP英語五年級(jí)上冊(cè)
- 2025年春季學(xué)校安全工作計(jì)劃范文例文
- 2024年股東股權(quán)繼承轉(zhuǎn)讓協(xié)議3篇
- 2025年中央歌劇院畢業(yè)生公開招聘11人歷年高頻重點(diǎn)提升(共500題)附帶答案詳解
- 北京市高校課件 開天辟地的大事變 中國近代史綱要 教學(xué)課件
- 監(jiān)事會(huì)年度工作計(jì)劃
- 2024中國近海生態(tài)分區(qū)
- 山東省濟(jì)南市2023-2024學(xué)年高一上學(xué)期1月期末考試化學(xué)試題(解析版)
- 2024年認(rèn)證行業(yè)法律法規(guī)及認(rèn)證基礎(chǔ)知識(shí)
- 大貓英語分級(jí)閱讀 六級(jí)1 Arthur's Fantastic Party課件
- SCA自動(dòng)涂膠系統(tǒng)培訓(xùn)講義
- LEC法取值標(biāo)準(zhǔn)對(duì)照表
- 華中數(shù)控車床編程及操作
評(píng)論
0/150
提交評(píng)論