七種排序方法_第1頁
七種排序方法_第2頁
七種排序方法_第3頁
七種排序方法_第4頁
七種排序方法_第5頁
已閱讀5頁,還剩1頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

#iiiclude<stdio.h>#iiiclude<stdhb.h>//#iiiclude<list>#iiiclude<matli.h>^defineL5〃排序元素個數(shù)^defineFALSE0#defineTRUE1//usingnamespacestd;hitnum;hityum;hitsum;hitsun;typedefstmctRecTypes"用戶定義結(jié)構(gòu)體{intkey;〃關(guān)鍵字}RecType^/記錄類型RecTypeR[L];〃定義排序趟數(shù)的全局變量voidBubblesort。;voidQuicksort(intlow,inthigh);voidInseitsortQ;voidShellsoilQ;voidSelectsort();voidHeap();voidMerge(iiitlow,intnunjnthigh.mt*x,int*y);voidMergesort。;〃二路歸并排序voidw();//主函數(shù)hit{RecTypeS[L+1];//SeqlistS;mti,k;charchi,ch2.q;pnntf("\n\t\t★排序算法實(shí)現(xiàn)與演示系統(tǒng)★\n\n\t\t請輸入%《個待排序的數(shù)據(jù):”,L);fbr(i=1;i<=L;i++)scanf(”%d”.&S[i].key);getcharQ;pnntffW);)chi';J7while(chl=y)pnntff\n”);pimtfC'Wt排序算法\n”);priiitfCu^tXt***********************************************\qh)-1——■一直接插入排序W);2——…-希爾排序3..??----冒泡排序3);4——----快速排序5..??----直接選擇排序W');6——----堆排序\1T);7——一一歸并排序0——.一■退出W);printf(M\ii\t\t***********************************************\qh)*pimtfC'Wt請選擇排序算法進(jìn)行演示:”);scan町%c”,&ch2);getcharQ;for(i=l;iv=L;i++)jR[i].key=S[i].key;)switch(cli2)jcase1?:Inseitsort();break;case2:ShellsoHQ;break;case'3':Bubblesort();break;case'4':W();break;case5:SelectsortQ;break;case6:Heap();break;case7:MergesoilQ;break;case'O':chl='n';break;default:system(Mclsn);//清屏對不起,您輸入有誤,請重新輸入!\1T);break;}iRch2!=。)(if(ch2==2||ch2==M|ch2=4||ch2==5||ch2==6||ch2=7||ch2=8)(pnntff\n\n\t\t排序完畢!”);pnntf(”\n\t\t按回車鍵繼續(xù)!”);q=getchar();iRq!='\n')chl=n;))}return1;}w(){pnntf(”\n\t\t原始數(shù)據(jù)為:\n\t\f);fbr(k=l;k<=L;k-H-)(priiitf("%5d",R[k].key);pnntR”\n”);yum=0;sun=0;sum=0:Quicksortl.L);prmtf(H\ii\t\t排序最終結(jié)果是:\n\t\t”);fbr(k=l;kv=L;k++)(prmtf(H%5d,\R[k].key);prmtf(n\n\t\t比較次數(shù)是:%dE\t\t”,sum);priiitf(n\n\t\t交換次數(shù)是:%d\ii\t\f\sun);}voidBubblesort。{inti,j,k,x=0,y=0,m=0;intexchange=TRUE;//標(biāo)志位excliange初始化為TRUE1pnntf("\n\t\t原始數(shù)據(jù)為:\ii\t\t");fbr(k=l;k<=L;k++)fpnntff%5d”,R[k].key);}pnnrfV'W');for(i=1;i<L&&exchange=TRUE;i++)//外層對總的循環(huán)次數(shù)執(zhí)行次數(shù)/exchaiige=FALSE;for(j=ljv=L+l-ij++)〃內(nèi)層相鄰記錄的交換與比較(m++y/比較次數(shù)++if(R[j].key<R[j-l].key)(R[0].key=R[j].key;R[j].key=R|j-l].key;R[j-1].key=R[0].key;exchange=TRUE;y++;〃移動次數(shù)++)}m--;〃比較次數(shù)if(exchaiige)〃輸出語句fI第%(1趟冒泡排序的結(jié)果為:for(k=l;k<=L;k++)(printf(,,%5d,\R[k].key);))pnntf("\t\t比較次數(shù)是:pnnrfV'%d”,m);pnntfC'\ii\t\t移動次數(shù)是:pnnrfV'%d”,y);pnntf(”\n\t\t排序最終結(jié)果是:\n\t\f);fbr(i=1;i<=L;i++)pnntff%5d”,R[i].key);}}voidQuicksort(intlow,inthigh)//該程序?yàn)榭焖偎惴▽?shí)現(xiàn){niti=lowj=lngh,k,t;//ffl變量i,j記錄待排序記錄首尾位置t=R[low].key;//以子表的第一個記錄做關(guān)鍵字,將其記錄暫存到R[0]中iRi>j)return;while(i<j)//從表的兩端交替地向中間掃描fwhile((i<j)&&(t<=R[j].key))//從右側(cè)向左端進(jìn)行掃描(卜;sum-H-;)】f(H)(R[0].key=R[i].key;R[i].key=R|j].key;m比關(guān)鍵字小的記錄移到移到低端R|j].key=R[O].key;sun-H-;)while(i<j&&R[i].keyvt)〃從左側(cè)向右端進(jìn)行掃描(i++;sum-H-;)】f(H){R[0].key=R[i].key;R[i].key=R|j].key;//將比關(guān)鍵字大的記錄移到高端R|j].key=R[O].key;R[j].key=R[i].key;yum+-r;prmtf(-\t\t第%(1趟快速排序的結(jié)果為:\n\t\t".yum);fbr(k=l;k<=L;k++)fpnntff%5d”,R[k].key);}pnntf(”\iT);〃輸出語句包括排序的結(jié)果及次數(shù)Quicksoit(low,j-1);//對左側(cè)子序列進(jìn)行快速排序Quicksort(j+Llugh)^/對右側(cè)子序列進(jìn)行快速排序}voidInseitsort(){nitij,k,m=0,x=0;//初始化比較次數(shù)變量m,移動次數(shù)變量xpnntf("\n\t\t原始數(shù)據(jù)為:\ii\t\t");fbr(k=l;k<=L;k++)fpnntff%5d”,R[k].key);}pnnrfV'W');〃主要運(yùn)行部分fbr(i=2;i<=L;i++)fif(R[i].key<R[i-l].key)(R[0]=R[】];j=i-l;while(R[0].key<R[j].key)(RU+1]=R。];J--;)R『H]=R[0];x++;)m++;〃輸出語句包括排序的結(jié)果及次數(shù)prmtf("\t\t第%d趟直接插入排序的結(jié)果為:\n\t\t",m);for(k=l;k<=L;k++)(printf(,,%5d,\R[k].key);)pnntff\n”);}pnnrfV'W);pnntf("\ii\t\t比較次數(shù)是:\t\t”);pnnrfV'%d”,m);pnntf("\ii\t\t移動次數(shù)是:\t\t”);pnnrfV'%d”,x);pnntf(”\n\t\t排序最終結(jié)果是:\n\t\t");fbr(i=1;i<=L;i++)printR”%5d”,R[i].key);}}voidShellsoitQ{intij,gap.x,k,y=0.m=0;〃初始化比較次數(shù)變量m,移動次數(shù)變量ypnntf("\n\t\t原始數(shù)據(jù)為:\ii\t\t");fbr(k=l;k<=L;k++)pnntff%5d”,R[k].key);}pnnrfV'W);〃函數(shù)主要部分gap=L/2;while(gap>0)for(i=gap+l;i<=L;i-H-)//從第gap+1個元素開始,將所有元素有序插入相應(yīng)分組中(j=i-gap;//向前找插入位置while(j>0)〃對相隔gap位置的元素進(jìn)行排序(if(R[j].key>R|j+gap].key)x=R[j].keyy/交換語句R[j].key=R[j+gap].key;R[j+gap].key=x;J=J?gap;y++;〃移動次數(shù)++else(J=。;}}gap=gap/2;//縮小增量m++y/比較次數(shù)++〃輸出語句包括排序的結(jié)果及次數(shù)prmtf("\t\t第%<1趟希爾排序的結(jié)果為:for(k=l;k<=L;k++)(pnntf(”%5d”,R[k].key);}pnntR”\n");}pnntfC'\n\t\t比較次數(shù)是:pnntfC'\n\t\t移動次數(shù)是:\t\f);pnnrf(”%d”,y);pnntf(”\n\t\t排序最終結(jié)果是:\n\t\t");fbr(i=l;iv=L;i++)fIprintf(”%5d”,R[i].key);}pnntffW);}voidSelectsort(){inti,j,k,h,x=O,y=O;pnntf("\n\t\t原始數(shù)據(jù)為:\n\t\t");fbr(k=l;k<=L;k++)pnntff%5d”,R[k].key);pnntf(M\nM);for(i=l;i<L;i-H-)jh=i;for(j=i+l;j<=Lj++)(x++;〃比較次數(shù)if(R[j].key<R[h].key)(h=j;//確定最小值))iRh!=i)(R[0].key=R[i].key;R[i].key=R[h].key;R[h].key=R[O].key;y++;〃移動次數(shù))prmtf(H\t\t第%d趟選擇排序的結(jié)果為:\n\t\f\i);for(k=l;kv=L;k++)(pnntf(”%5d”,R[k].key);)pnntff\n”);}〃輸出語句包括排序的結(jié)果及次數(shù)pnntf(M\n\t\t比較次數(shù):%d”,x);pnntf(M\n\t\t移動次數(shù):%d”,y);pnntf(”\n\t\t排序最終結(jié)果是:\n\t\t");fbr(i=1;i<=L;i++)printf(,,%5d,\R[i].key);}pnntf(M\nM);}voidMerge(nunjnthigh.iiit*y)//兩個有序序列的合并intj=lowj=mm+l,p=0;RecType*R1;〃i對第一個開始到結(jié)尾,j從第二個開始到結(jié)尾R1=newRecType[high-low+1];1R!R1)jpruitfC,內(nèi)存不足!”);}while(i<=mm&&jv=high)〃兩序列從起始位置開始將小的元素放入到R1中Rl[p++]=(R[i].keyv=R[j].keyeR[i++]:R[j++];(*x)++;(*y)++;}while(i<=min)//第二段結(jié)束,剩余放入R1中IRl[p++]=R[i++];(*y)++;}wlule(j<=high)//第二段剩余,剩余放入R1中Rl[p++]=R[j++];(*y)++;}for(p=0,i=low;iv=high;p++,i++)//剩余元素放入R1中,賦予RR[i]=Rl[p];(*y)++;}}voidMergePass(intlength.mt**y)〃一次二路歸并排序{mti;fbr(i=l;i+2*lengtli-1<=L;i=i+2*length)Merge(ij+length-1j+2*length-1.x,y);〃函數(shù)調(diào)用}if(i+length-l<L)Merge(ij+length-lX,x,y);〃函數(shù)調(diào)用}}//歸并排序voidMeigesortQ〃二路歸并排序Hitlength.k,m=0.i.x=O,y=0;pnntf("\n\t\t原始數(shù)據(jù)為:\ii\t\t");fbr(k=1;k〈=L;k++)pnntff%5d”,R[k].key);}prinrifk);fbr(length=1;length<L;length*=2)fMergePass(length,&x,&y);m++;〃輸出語句包括排序的結(jié)果及次數(shù)prmtf("\t\t第%<1趟歸并排序的結(jié)果為:for(k=l;kv=L;k++)(pnntf(”%5d”,R[k].key);)pnntff\n”);}pnntf(”\n\t\t排序最終結(jié)果是:\n\t\t");fbr(i=1;i<=L;i++)fprintf(n%5dM,R[i].key);}prinrifk);pnntf(M\t\t比較次數(shù):%d\i「x);pnntf(M\t\t移動次數(shù):%d\n”,y);}voidCreateHeap(introot,mtindex,int*x,int*y){intj^temp.fhush;j=2*root;//j指向左孩子temp=R[root].key;fiiiish=O;wlule(j<=index&&fiiiish=O)f1町〈index)(].key<R[j+1].key)(J++;))〃指向較大的孩子if(tem

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論