#include#include#include#include void BubbleSort(int *L,int N) { //冒泡 int i,j; int t; for(i=1;ii;j--) if(L[j]<L[j-1]) { t=L[j]; L[j]=L[j-1]; L[j-1]=t; } } } int SelectMinKey(int *L,int N,int n) { int i,min=n; for(i=n+1;i<=N;i++) if(L[i]<L[min]) min=i; return min; } void SelectSort(int *L,int N) { //選擇 int i,j; int t; for(i=1;i<N;i++) { j=SelectMinKey(L,N,i); if(i!=j) { t=L[i]; L[i]=L[j]; L[j]=t; } } } void InsertSort(int *L,int N) { //插入 int i,j; for(i=2;i<=N;i++) { if(L[i]<L[i-1]) { L[0]=L[i]; L[i]=L[i-1]; for(j=i-2;L[0]<L[j];j--) L[j+1]=L[j]; L[j+1]=L[0]; } } } void ShellInsert(int *L,int N, int dk) { // 對順序表L作一趟希爾插入排序。
本算法對算法10.1作了以下修改: // 1. 前后記錄位置的增量是dk,而不是1; // 2. r[0]只是暫存單元,不是哨兵。當j<=0時(shí),插入位置已找到。
int i,j; for(i=dk+1;i<=N;++i) if(L[i]0&&L[0]<L[j]);j-=dk) L[j+dk]=L[j]; // 記錄后移,查找插入位置 L[j+dk]=L[0]; // 插入 } } // ShellInsert void ShellSt(int *L,int N, int dlta[], int t) { // 算法10.5 // 按增量序列dlta[0..t-1]對順序表L作希爾排序。 for(int k=0;k<t;++k) ShellInsert(L,N, dlta[k]); // 一趟增量為dlta[k]的插入排序 } // ShellSort void ShellSort(int *L,int N) { //希爾 int t=(int)log(N); int k,*dlta; dlta=(int*)malloc(t*4); //產(chǎn)生增量序列 for(k=0;k<t;k++) dlta[k]=(int)pow(2,t-k)-1; ShellSt(L,N,dlta,t); } int main() { int N=250; int i,j,k; int t; int ti[16]; int *L; srand(time(NULL)); printf("長(cháng)度\t|冒泡\t|選擇\t|插入\t|希爾\n"); printf("--------+-------------------------------------------------------------"); for(j=0;N<100000;j++) { L=(int *)malloc((N+1)*4); t=0; for(i=1;i<=N;i++) L[i]=rand(); ti[t++]=clock(); BubbleSort(L,N); ti[t++]=clock(); for(i=1;i<=N;i++) L[i]=rand(); ti[t++]=clock(); SelectSort(L,N); ti[t++]=clock(); for(i=1;i<=N;i++) L[i]=rand(); ti[t++]=clock(); InsertSort(L,N); ti[t++]=clock(); for(i=1;i<=N;i++) L[i]=rand(); ti[t++]=clock(); ShellSort(L,N); ti[t++]=clock(); printf("\n%d\t",N); for(k=0;k<4;k++) printf("| %d\t",(ti[2*k+1]-ti[2*k])); N*=5; } printf("\n\n"); }//這是我們當年學(xué)數據結構時(shí)我自己寫(xiě)的,給你改了一下,輸出是對隨機產(chǎn)生一些數,對四種算法進(jìn)行比較,有問(wèn)題可以hi我啊 另外,站長(cháng)團上有產(chǎn)品團購,便宜有保證。
第一問(wèn)、答:為解決某一問(wèn)題而設計的確定的有限的步驟就稱(chēng)為算法
第二問(wèn)、答:自然語(yǔ)言、流程圖、偽代碼或程序設計語(yǔ)言
第三問(wèn)、答:
自然語(yǔ)言
用自然語(yǔ)言表示算法,人比較容易理解,但書(shū)寫(xiě)較煩瑣,具有不確切性,容易引起歧義,造成誤解;
對較復雜的問(wèn)題,用自然語(yǔ)言難以表達準確;
計算機不能識別和執行。
流程圖
用圖形符號表示算法必須要有一組統一規定、含義確定的專(zhuān)用符號;
用流程圖表示算法就較直觀(guān)、形象;
計算機不能識別和執行。
偽代碼或程序設計語(yǔ)言
只有用計算機能理解和執行的程序設計語(yǔ)言把算法表示出來(lái),輸入計算機執行,計算機才能按照預定的算法去解決問(wèn)題;
不同類(lèi)型的計算機能夠識別的指令和語(yǔ)言不盡相同,即使對同一種計算機語(yǔ)言,不同類(lèi)型的計算機對該語(yǔ)言的翻譯程序也有差異。
聲明:本網(wǎng)站尊重并保護知識產(chǎn)權,根據《信息網(wǎng)絡(luò )傳播權保護條例》,如果我們轉載的作品侵犯了您的權利,請在一個(gè)月內通知我們,我們會(huì )及時(shí)刪除。
蜀ICP備2020033479號-4 Copyright ? 2016 學(xué)習?shū)B(niǎo). 頁(yè)面生成時(shí)間:2.877秒