#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时,插入位置已找到。
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); //产生增量序列 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("长度\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"); }//这是我们当年学数据结构时我自己写的,给你改了一下,输出是对随机产生一些数,对四种算法进行比较,有问题可以hi我啊 另外,站长团上有产品团购,便宜有保证。
第一问、答:为解决某一问题而设计的确定的有限的步骤就称为算法
第二问、答:自然语言、流程图、伪代码或程序设计语言
第三问、答:
自然语言
用自然语言表示算法,人比较容易理解,但书写较烦琐,具有不确切性,容易引起歧义,造成误解;
对较复杂的问题,用自然语言难以表达准确;
计算机不能识别和执行。
流程图
用图形符号表示算法必须要有一组统一规定、含义确定的专用符号;
用流程图表示算法就较直观、形象;
计算机不能识别和执行。
伪代码或程序设计语言
只有用计算机能理解和执行的程序设计语言把算法表示出来,输入计算机执行,计算机才能按照预定的算法去解决问题;
不同类型的计算机能够识别的指令和语言不尽相同,即使对同一种计算机语言,不同类型的计算机对该语言的翻译程序也有差异。
声明:本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
蜀ICP备2020033479号-4 Copyright © 2016 学习鸟. 页面生成时间:2.877秒