版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
驗(yàn)證性實(shí)驗(yàn)10:排序子系統(tǒng)班級(jí):H1001學(xué)號(hào):09姓名:陸俊實(shí)驗(yàn)日期:2023.12.71.實(shí)驗(yàn)?zāi)康摹?〕掌握常用排序方法的根本思想?!?〕通過(guò)實(shí)驗(yàn)加深理解各種排序算法?!?〕通過(guò)實(shí)驗(yàn)掌握各種排序方法的時(shí)間復(fù)雜度分析?!?〕了解各種排序方法的優(yōu)缺點(diǎn)及適用范圍。2.實(shí)驗(yàn)內(nèi)容〔1〕編寫(xiě)直接插入排序程序?!?〕編寫(xiě)希爾排序程序?!?〕編寫(xiě)冒泡排序程序?!?〕編寫(xiě)快速排序程序?!?〕編寫(xiě)選擇排序程序。〔6〕編寫(xiě)歸并排序程序?!?〕編寫(xiě)堆排序程序。〔8〕程序執(zhí)行時(shí),要求能顯示每一趟的排序結(jié)果?!?〕設(shè)計(jì)一個(gè)選擇式菜單,以菜單方式選擇上述排序程序。排序子系統(tǒng) *************************************************** *1------------更新排序數(shù)據(jù)* *2------------直接插入排序* *3------------希爾排序* *4------------冒泡排序* *5------------快速排序* *6------------選擇排序* *7------------歸并排序* *8------------堆排序* *0------------返回* ***************************************************請(qǐng)選擇菜單號(hào)〔0--8〕:3.實(shí)驗(yàn)程序#include<stdio.h>#include<stdlib.h>#include<math.h>#defineL8#defineFALSE0#defineTURE1typedefstruct{ intkey; charotherinfo;}RecType;typedefRecTypeSeqlist[L+1];intnum;SeqlistR;voidInsertsort();voidBubblesort();voidQuickSort(intlow,inthigh);voidShellsort();voidSelectsort();voidMergesort();intPartition(inti,intj);voidHeap();voidmain(){ SeqlistS; inti,k; charch1,ch2,q; printf("\n\t請(qǐng)輸入%d個(gè)待排序數(shù)據(jù)〔按【Enter】鍵分隔〕:\n\t",L); for(i=1;i<=L;i++) { scanf("%d",&S[i].key); getchar(); printf("\t"); } printf("\n\t排序數(shù)據(jù)已經(jīng)輸入完畢!"); ch1='y'; while(ch1=='y'||ch1=='Y') { printf("\n"); printf("\n\t\t排序子系統(tǒng)"); printf("\n\t\t***************************************************"); printf("\n\t\t*1------------更新排序數(shù)據(jù)*"); printf("\n\t\t*2------------直接插入排序*"); printf("\n\t\t*3------------希爾排序*"); printf("\n\t\t*4------------冒泡排序*"); printf("\n\t\t*5------------快速排序*"); printf("\n\t\t*6------------選擇排序*"); printf("\n\t\t*7------------歸并排序*"); printf("\n\t\t*8------------堆排序*"); printf("\n\t\t*0------------返回*"); printf("\n\t\t***************************************************"); printf("\n\t\t請(qǐng)選擇菜單號(hào)〔0--8〕:"); scanf("%c",&ch2); getchar(); for(i=1;i<=L;i++) R[i].key=S[i].key; switch(ch2) { case'1': printf("\n\t請(qǐng)輸入%d個(gè)待排序數(shù)據(jù)〔按【Enter】鍵分隔〕:\n\t",L); for(i=1;i<=L;i++) { scanf("%d",&S[i].key); getchar(); printf("\t"); } printf("\n\t排序數(shù)據(jù)已經(jīng)輸入完畢!"); break; case'2':Insertsort();break; case'3':Shellsort();break; case'4':Bubblesort();break; case'5':printf("\n\t原始數(shù)據(jù)為〔按【Enter】鍵開(kāi)始排序〕:"); for(k=1;k<=L;k++) printf("%5d",R[k].key); getchar(); printf("\n"); num=0; QuickSort(1,L); printf("\n\t排序的最終結(jié)果是:"); for(k=1;k<=L;k++) printf("%5d",R[k].key); printf("\n");break; case'6':Selectsort();break; case'7':Mergesort();break; case'8':Heap();break; case'0':ch1='n';break; default:printf("\n\t輸入出錯(cuò)!"); } if(ch2!='0') { if(ch2=='2'||ch2=='3'||ch2=='4'||ch2=='5'||ch2=='6'||ch2=='7'||ch2=='8') printf("\n\t排序輸出完畢!"); printf("\n\n\t按回車(chē)鍵返回。"); q=getchar(); if(q!='\xA') { getchar(); ch1='n'; } } }}voidInsertsort(){ inti,j,k,m=0; printf("\n\t原始數(shù)據(jù)為〔按【Enter】鍵開(kāi)始排序〕:"); for(k=1;k<=L;k++) printf("%5d",R[k].key); getchar(); printf("\n"); for(i=2;i<=L;i++) { if(R[i].key<R[i-1].key) { R[0]=R[i];j=i-1; while(R[0].key<R[j].key) { R[j+1]=R[j]; j--; } R[j+1]=R[0]; } m++; printf("\t第%d趟排序結(jié)果為〔按【Enter】鍵繼續(xù)〕:",m); for(k=1;k<=L;k++) printf("%5d",R[k].key); getchar(); printf("\n"); } printf("\n\t排序的最終結(jié)果是:"); for(i=1;i<=L;i++) printf("%5d",R[i].key); printf("\n");}voidShellsort(){ inti,j,gap,x,m=0,k; printf("\n\t原始數(shù)據(jù)為〔按【Enter】鍵開(kāi)始排序〕:"); for(k=1;k<=L;k++) printf("%5d",R[k].key); getchar(); printf("\n"); gap=L/2; while(gap>0) { for(i=gap+1;i<=L;i++) { j=i-gap; while(j>0) { if(R[j].key>R[j+gap].key) { x=R[j].key;R[j].key=R[j+gap].key; R[j+gap].key=x; j=j-gap; } else j=0; } } gap=gap/2; m++; printf("\t第%d趟排序結(jié)果為〔按【Enter】鍵繼續(xù)〕:",m); for(k=1;k<=L;k++) printf("%5d",R[k].key); getchar(); printf("\n"); } printf("\n\t排序的最終結(jié)果是:"); for(i=1;i<=L;i++) printf("%5d",R[i].key); printf("\n");}voidBubblesort(){ inti,j,k; intexchange; printf("\n\t原始數(shù)據(jù)為〔按【Enter】鍵開(kāi)始排序〕:"); for(k=1;k<=L;k++) printf("%5d",R[k].key); getchar(); printf("\n"); for(i=1;i<=L;i++) { exchange=FALSE; for(j=L;j>=i+1;j--) if(R[j].key<R[j-1].key) { R[0].key=R[j].key; R[j].key=R[j-1].key; R[j-1].key=R[0].key; exchange=TURE; } if(exchange) { printf("\t第%d趟排序結(jié)果為〔按【Enter】鍵繼續(xù)〕:",i); for(k=1;k<=L;k++) printf("%5d",R[k].key); getchar(); printf("\n"); } } printf("\n\t排序的最終結(jié)果是:"); for(i=1;i<=L;i++) printf("%5d",R[i].key); printf("\n");}intPartition(inti,intj){ RecTypepirot=R[i]; while(i<j) { while(i<j&&R[j].key>=pirot.key) j--; if(i<j) R[i++]=R[j]; while(i<j&&R[j].key<=pirot.key) i++; if(i<j) R[j--]=R[i]; } R[i]=pirot; returni;}voidQuickSort(intlow,inthigh){ intpirotpos,k; if(low<high) { pirotpos=Partition(low,high); num++; printf("\t第%d趟排序結(jié)果為〔按【Enter】鍵繼續(xù)〕:",num); for(k=1;k<=L;k++) printf("%5d",R[k].key); getchar(); printf("\n"); QuickSort(low,pirotpos-1); QuickSort(pirotpos+1,high); }}voidSelectsort(){ inti,j,k,h; printf("\n\t原始數(shù)據(jù)為〔按【Enter】鍵開(kāi)始排序〕:"); for(k=1;k<=L;k++) printf("%5d",R[k].key); getchar(); printf("\n"); for(i=1;i<=L;i++) { h=i; for(j=i+1;j<=L;j++) if(R[j].key<R[h].key) h=j; if(h!=j) { R[0]=R[i]; R[i]=R[h]; R[h]=R[0]; } printf("\t第%d趟排序結(jié)果為〔按【Enter】鍵繼續(xù)〕:",i); for(k=1;k<=L;k++) printf("%5d",R[k].key); getchar(); printf("\n"); } printf("\n\t排序的最終結(jié)果是:"); for(i=1;i<=L;i++) printf("%5d",R[i].key); printf("\n");}voidMerge(intlow,intmm,inthigh){ inti=low,j=mm+1,p=0; RecType*R1; R1=newRecType[high-low+1]; if(!R1) printf("\n\t內(nèi)存容量不夠!"); while(i<mm&&j<=high) R1[p++]=(R[i].key<=R[j].key)?R[i++]:R[j++]; while(i<=mm) R1[p++]=R[i++]; while(i<=high) R1[p++]=R[j++]; for(p=0,i=low;i<=high;p++,i++) R[i]=R1[p];}voidMergePass(intlength){ inti; for(i=1;i+2*length-1<=L;i=i+2*length) Merge(i,i+length-1,i+2*length-1); if(i+length-1<L) Merge(i,i+length-1,L);}voidMergesort(){ intlength,k,m=0; printf("\n\t原始數(shù)據(jù)為〔按【Enter】鍵開(kāi)始排序〕:"); for(k=1;k<=L;k++) printf("%5d",R[k].key); getchar(); printf("\n"); for(length=1;length<L;length*=2) { MergePass(length); m++; printf("\t第%d趟排序結(jié)果為〔按【Enter】鍵繼續(xù)〕:",m); for(k=1;k<=L;k++) printf("%5d",R[k].key); getchar(); printf("\n"); } printf("\n\t排序的最終結(jié)果是:"); for(k=1;k<=L;k++) printf("%5d",R[k].key); printf("\n");}voidCreateHeap(introot,intindex){ intj,temp,finish; j=2*root; temp=R[root].key; finish=0; while(j<=index&&finish==0) { if(j<index) if(R[j].key<R[j+1].key) j++; if(temp>=R[j].key) finish=1; else { R[j/2].key=R[j].key; j=j*2; } } R[j/2].key=temp;}voidHeapSort(){ inti,j,temp,k; for(i=(L/2);i>=1;i--) CreateHeap(i,L); for(i=L-1,k=1;i>=1
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 個(gè)體戶(hù)店鋪?zhàn)赓U合同范本(2024版)
- 二零二五年度跨境電商平臺(tái)授權(quán)經(jīng)營(yíng)合同4篇
- 2025年度木制地板鋪裝工程木工勞務(wù)分包合同2篇
- 2025版高端木門(mén)定制與售后服務(wù)合同范本3篇
- 二零二五年度冷鏈倉(cāng)儲(chǔ)與運(yùn)輸一體化采購(gòu)合同3篇
- 2025版農(nóng)家樂(lè)旅游配套設(shè)施建設(shè)與租賃合同4篇
- 二零二五年度電商一件代發(fā)與品牌合作戰(zhàn)略協(xié)議4篇
- 2025年度鋼材回收利用合作協(xié)議范本2篇
- 二零二五年度船舶租賃與船舶租賃市場(chǎng)拓展合同3篇
- 2023年-2024年項(xiàng)目部治理人員安全培訓(xùn)考試題含完整答案(考點(diǎn)梳理)
- 高考滿(mǎn)分作文常見(jiàn)結(jié)構(gòu)完全解讀
- 理光投影機(jī)pj k360功能介紹
- 六年級(jí)數(shù)學(xué)上冊(cè)100道口算題(全冊(cè)完整版)
- 八年級(jí)數(shù)學(xué)下冊(cè)《第十九章 一次函數(shù)》單元檢測(cè)卷帶答案-人教版
- 帕薩特B5維修手冊(cè)及帕薩特B5全車(chē)電路圖
- 系統(tǒng)解剖學(xué)考試重點(diǎn)筆記
- 小學(xué)五年級(jí)解方程應(yīng)用題6
- 云南省地圖含市縣地圖矢量分層地圖行政區(qū)劃市縣概況ppt模板
- 年月江西省南昌市某綜合樓工程造價(jià)指標(biāo)及
- 作物栽培學(xué)課件棉花
評(píng)論
0/150
提交評(píng)論