




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
PAGEPAGE12信息與控制學(xué)院課程設(shè)計(jì) 題目排序算法的比較學(xué)生姓名 學(xué)號(hào) 學(xué)院 專(zhuān)業(yè) 指導(dǎo)教師 二O一四年12月26日一、實(shí)驗(yàn)?zāi)康念}目與要求編寫(xiě)排序算法至少5種對(duì)排序算法進(jìn)行比較,(包括時(shí)間和比較次數(shù))輸出結(jié)果本程序涉及的知識(shí)點(diǎn)變量的定義、輸入和輸出函數(shù)、產(chǎn)生隨機(jī)數(shù)函數(shù)、if語(yǔ)句、goto語(yǔ)句、冒泡排序,直接插入排序,選擇排序,希爾排序等。二、功能設(shè)計(jì)冒泡排序:將相鄰的兩個(gè)數(shù)比較,將較小的數(shù)調(diào)到前頭;有n個(gè)數(shù)就要進(jìn)行n-1趟比較,第一次比較中要進(jìn)行n-1次兩兩比較,在第j趟比較中,要進(jìn)行n-j次兩兩比較。插入排序:在得到要排序的數(shù)組以后,講數(shù)組分為兩個(gè)部分,數(shù)組的第一個(gè)元素為一個(gè)部分,剩下的元素為一部分,然后從數(shù)組的第二個(gè)元素開(kāi)始,和該元素以前的所有元素比較,如果之前的元素沒(méi)有比該元素大的,那么該元素的位置不變,如果有元素的值比該元素大,那么記錄相愛(ài)他所在的位置;例如I,該元素的位置為k,則將從i到k位置上的所有元素往后移動(dòng)一位,然后將k位置上的值移動(dòng)到i位置上。這樣就找到了K所在的位置。每一個(gè)元素都這樣進(jìn)行,最終就會(huì)得到排好順序的數(shù)組。選擇排序:首先以一個(gè)元素為基準(zhǔn),從一個(gè)方向開(kāi)始掃描,比如從左到右掃描,以A[0]為基準(zhǔn),接下來(lái)從A[0]….A[9]中找出最小的元素,將其與A[0]交換。然后將其基準(zhǔn)位置右移一位,重復(fù)上面的動(dòng)作,比如,以A[1]為基準(zhǔn),找出A[1]~A[9]中最小的,將其與A[1]交換。一直進(jìn)行到將基準(zhǔn)位置移到數(shù)組最后一個(gè)元素時(shí)排序結(jié)束。 計(jì)時(shí):使用start_t=clock();計(jì)下開(kāi)始時(shí)間使用end_t=clock();記下結(jié)束時(shí)間針對(duì)不同的排序在不同的位置插入計(jì)時(shí)語(yǔ)句,完成計(jì)時(shí)功能三、功能實(shí)現(xiàn)3.1、隨機(jī)數(shù)函數(shù)1)函數(shù)原形:rand()2)功能:rand()函數(shù)通過(guò)編程生成小于30000的隨機(jī)數(shù)列3)模塊代碼: for(i=1;i<n+1;i++){b:L.elem[i].key=rand(); printf("%10d",L.elem[i].key);if(L.elem[i].key>30000)gotob;++L.length;}} 3.2、冒泡排序函數(shù)1)函數(shù)原形:qipao(SqList&L)2)功能:通過(guò)相鄰比較,移位達(dá)到從小到大的數(shù)據(jù)排列。3)相關(guān)變量:SqList&L:接收帶排序的數(shù)組。4)模塊代碼及其相關(guān)注釋?zhuān)簐oidqipao(SqList&L)//冒泡{start_t=clock();inti=1,j,bj=0,yd=0;while(i<L.length){for(j=1;j<L.length;j++){bj++;if(L.elem[j].key>L.elem[j+1].key){L.elem[0].key=L.elem[j].key;L.elem[j].key=L.elem[j+1].key;L.elem[j+1].key=L.elem[0].key;yd+=3;}}i++;}四、C程序設(shè)計(jì)源碼#include<stdio.h>#include<stdlib.h>#include<string.h>#include<time.h>#defineLIST_INIT_SIZE50000intbj1,yd1,n;clock_tstart_t,end_t;typedefstruct{intkey;}ElemType;typedefstruct{ElemType*elem;intlength;}SqList;voidaddlist(SqList&L){inti;a:printf("請(qǐng)輸入你要輸入的個(gè)數(shù):");scanf("%d",&n);if(n>50000){printf("超出范圍重新輸入!!!\n");gotoa;}L.elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));if(!L.elem)exit(0);L.length=0;for(i=1;i<n+1;i++){b:L.elem[i].key=rand(); printf("%10d",L.elem[i].key);if(L.elem[i].key>30000)gotob;++L.length;}}voidSelectSort(SqList&L)//選擇{start_t=clock();inti,j,k,bj=0,yd=0;for(i=1;i<L.length;i++){k=i;for(j=i+1;j<L.length;j++){bj++;if(L.elem[j].key<L.elem[k].key)k=j;}if(i!=k){L.elem[0].key=L.elem[i].key;L.elem[i].key=L.elem[k].key;L.elem[k].key=L.elem[0].key;yd+=3;}}end_t=clock();printf("排序結(jié)果為:\n");for(i=1;i<=L.length;i++){printf("%5d",L.elem[i].key);}printf("比較次數(shù)為%d移動(dòng)次數(shù)為%d\n",bj,yd);printf("排序用時(shí)為%f\n",float(end_t-start_t)/CLK_TCK);}voidqipao(SqList&L)//冒泡{start_t=clock();inti=1,j,bj=0,yd=0;while(i<L.length){for(j=1;j<L.length;j++){bj++;if(L.elem[j].key>L.elem[j+1].key){L.elem[0].key=L.elem[j].key;L.elem[j].key=L.elem[j+1].key;L.elem[j+1].key=L.elem[0].key;yd+=3;}}i++;}end_t=clock();printf("排序結(jié)果為:\n");for(i=1;i<=L.length;i++){printf("%5d",L.elem[i].key);}printf("比較次數(shù)為%d移動(dòng)次數(shù)為%d\n",bj,yd);printf("排序用時(shí)為%f\n",float(end_t-start_t)/CLK_TCK);}voidInsertSort(SqList&L)//直接插入{start_t=clock();inti,j,yd=0,bj=0;for(i=2;i<=L.length;i++){if(L.elem[i].key<L.elem[i-1].key){L.elem[0].key=L.elem[i].key;yd++;j=i-1;bj++;while(L.elem[0].key<L.elem[j].key){L.elem[j+1].key=L.elem[j].key;j--;yd++;bj++;}L.elem[j+1].key=L.elem[0].key;yd++;}}end_t=clock();printf("排序結(jié)果為:\n");for(i=1;i<=L.length;i++){printf("%5d",L.elem[i].key);}printf("比較次數(shù)為%d移動(dòng)次數(shù)為%d\n",bj,yd);printf("排序用時(shí)為%f\n",float(end_t-start_t)/CLK_TCK);}voidxier(SqList&L)//希爾{start_t=clock();inti,d=L.length/2,j,w=0,k,yd=0,bj=0;while(w<d){w=1;for(i=w;i<L.length;i=i+d){k=i;for(j=i+d;j<L.length;j=j+d){if(L.elem[i].key>L.elem[j].key){k=j;bj++;}}if(i!=k){L.elem[0].key=L.elem[i].key;L.elem[i].key=L.elem[k].key;L.elem[k].key=L.elem[0].key;yd+=3;}w++;}d=d/2;w=1;}end_t=clock();printf("排序結(jié)果為:\n");for(i=1;i<=L.length;i++){printf("%5d",L.elem[i].key);}printf("比較次數(shù)為%d移動(dòng)次數(shù)為%d\n",bj,yd);printf("排序用時(shí)為%f\n",float(end_t-start_t)/CLK_TCK);}voidBeforeSort(){yd1=0,bj1=0;}voiddisplay(intm,intn){printf("比較次數(shù)為%d移動(dòng)次數(shù)為%d\n",m,n);}intPartition(SqList&L,intlow,inthigh)//快速排序{intpivotkey;L.elem[0]=L.elem[low];yd1++;pivotkey=L.elem[low].key;while(low<high){yd1++;while(low<high&&L.elem[high].key>=pivotkey)--high;L.elem[low]=L.elem[high];bj1++;yd1++;while(low<high&&L.elem[low].key<=pivotkey)++low;L.elem[high]=L.elem[low];bj1++;yd1++;}L.elem[low]=L.elem[0];yd1++;returnlow;}voidQSort(SqList&L,intlow,inthigh){intpivotloc;if(low<high){pivotloc=Partition(L,low,high);QSort(L,low,pivotloc-1);QSort(L,pivotloc+1,high);}}voidQuickSort(SqList&L){start_t=clock();BeforeSort();QSort(L,1,L.length);printf("排序結(jié)果為:\n");for(inti=1;i<=L.length;i++){printf("%5d",L.elem[i].key);}display(yd1,bj1);end_t=clock();printf("排序用時(shí)為%f\n",float(end_t-start_t)/CLK_TCK);}voidMerge(ElemTypeR[],ElemTypeR1[],intlow,intm,inthigh)//歸并{inti=low,j=m+1,k=low;while(i<=m&&j<=high){if(R[i].key<=R[j].key){bj1++;R1[k]=R[i];yd1++;i++;k++;}else{bj1++;R1[k]=R[j];yd1++;j++;k++;}}while(i<=m){R1[k]=R[i];yd1++;i++;k++;}while(j<=high){R1[k]=R[j];yd1++;j++;k++;}}voidMergePass(ElemTypeR[],ElemTypeR1[],intlength,intn){inti=0,j;while(i+2*length-1<n){Merge(R,R1,i,i+length-1,i+2*length-1);i=i+2*length;}if(i+length-1<n-1)Merge(R,R1,i,i+length-1,n-1);elsefor(j=i;j<n;j++)R1[j]=R[j];}voidMSort(ElemTypeR[],ElemTypeR1[],intn){intlength=1;while(length<n){MergePass(R,R1,length,n);length=2*length;MergePass(R1,R,length,n);length=2*length;}}voidMergeSort(SqList&L){start_t=clock();BeforeSort();MSort(L.elem,L.elem,L.length);printf("排序結(jié)果為:\n");for(inti=1;i<=L.length;i++){printf("%5d",L.elem[i].key);}display(yd1,bj1);end_t=clock();printf("排序用時(shí)為%f\n",float(end_t-start_t)/CLK_TCK);}voidmain(){SqListL;addlist(L);printf("\n冒泡排序:\n");qipao(L);addlist(L);printf("\n直插排序:\n");InsertSort(L);addlist(L);printf("\n選擇排序:\n");SelectSo
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 福建省東山縣第二中學(xué)2025屆化學(xué)高二下期末聯(lián)考試題含解析
- 校外培訓(xùn)用戶(hù)管理辦法
- 極端氣候預(yù)警管理辦法
- 沖擊地壓防治管理辦法
- 作戰(zhàn)數(shù)據(jù)存儲(chǔ)管理辦法
- 河南省核查員管理辦法
- 兵棋推演中的智能決策技術(shù):基于大語(yǔ)言模型的探索與應(yīng)用
- 星級(jí)管理辦法舉措建議
- 江蘇沛縣公墓管理辦法
- 合肥廠(chǎng)區(qū)定位管理辦法
- 企業(yè)消防安全責(zé)任制模板
- 2025屆黑龍江省哈爾濱四十七中學(xué)七年級(jí)英語(yǔ)第二學(xué)期期末統(tǒng)考試題含答案
- 人工智能通識(shí)課程開(kāi)課方案
- 2025-2030中國(guó)智慧政務(wù)行業(yè)發(fā)展策略及投資潛力預(yù)測(cè)報(bào)告
- 【中考真題】2025年福建中考數(shù)學(xué)真題試卷(含解析)
- 2025年四川省宜賓市中考數(shù)學(xué)真題試卷及答案解析
- 2025年時(shí)事政治考試題及答案(300題)
- 楊浦區(qū)“十五五”規(guī)劃綱要及專(zhuān)項(xiàng)規(guī)劃編制工作方案
- 2025年中國(guó)氧化鎂項(xiàng)目投資計(jì)劃書(shū)
- T/CIE 186-2023業(yè)務(wù)研發(fā)安全運(yùn)營(yíng)一體化能力成熟度模型
- 2025屆內(nèi)蒙古自治區(qū)呼和浩特市七年級(jí)數(shù)學(xué)第二學(xué)期期末檢測(cè)試題含解析
評(píng)論
0/150
提交評(píng)論