#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) { // 對(duì)順序表L作一趟希爾插入排序。
本算法對(duì)算法10.1作了以下修改: // 1. 前后記錄位置的增量是dk,而不是1; // 2. r[0]只是暫存單元,不是哨兵。當(dāng)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]對(duì)順序表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("長(zhǎ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"); }//這是我們當(dāng)年學(xué)數(shù)據(jù)結(jié)構(gòu)時(shí)我自己寫的,給你改了一下,輸出是對(duì)隨機(jī)產(chǎn)生一些數(shù),對(duì)四種算法進(jìn)行比較,有問題可以hi我啊 另外,站長(zhǎng)團(tuán)上有產(chǎn)品團(tuán)購,便宜有保證。
第一問、答:為解決某一問題而設(shè)計(jì)的確定的有限的步驟就稱為算法
第二問、答:自然語言、流程圖、偽代碼或程序設(shè)計(jì)語言
第三問、答:
自然語言
用自然語言表示算法,人比較容易理解,但書寫較煩瑣,具有不確切性,容易引起歧義,造成誤解;
對(duì)較復(fù)雜的問題,用自然語言難以表達(dá)準(zhǔn)確;
計(jì)算機(jī)不能識(shí)別和執(zhí)行。
流程圖
用圖形符號(hào)表示算法必須要有一組統(tǒng)一規(guī)定、含義確定的專用符號(hào);
用流程圖表示算法就較直觀、形象;
計(jì)算機(jī)不能識(shí)別和執(zhí)行。
偽代碼或程序設(shè)計(jì)語言
只有用計(jì)算機(jī)能理解和執(zhí)行的程序設(shè)計(jì)語言把算法表示出來,輸入計(jì)算機(jī)執(zhí)行,計(jì)算機(jī)才能按照預(yù)定的算法去解決問題;
不同類型的計(jì)算機(jī)能夠識(shí)別的指令和語言不盡相同,即使對(duì)同一種計(jì)算機(jī)語言,不同類型的計(jì)算機(jī)對(duì)該語言的翻譯程序也有差異。
聲明:本網(wǎng)站尊重并保護(hù)知識(shí)產(chǎn)權(quán),根據(jù)《信息網(wǎng)絡(luò)傳播權(quán)保護(hù)條例》,如果我們轉(zhuǎn)載的作品侵犯了您的權(quán)利,請(qǐng)?jiān)谝粋€(gè)月內(nèi)通知我們,我們會(huì)及時(shí)刪除。
蜀ICP備2020033479號(hào)-4 Copyright ? 2016 學(xué)習(xí)鳥. 頁面生成時(shí)間:2.877秒