百度百科中定义clock():clock()是C/C++中的计时函数,而与其相关的数据类型是clock_t。在MSDN中,查得对clock函数定义如下:
clock_t clock(void) ;
简单而言,就是该程序从启动到函数调用占用CPU的时间。这个函数返回从“开启这个程序进程”到“程序中调用clock()函数”时之间的CPU时钟计时单元(clock tick)数,在MSDN中称之为挂钟时间(wal-clock);若挂钟时间不可取,则返回-1。其中clock_t是用来保存时间的数据类型。
1 #include<stdio.h> 2 #include<time.h> 3 #include<math.h> 4 #define max_num 10000 5 clock_t start,stop;//clock_t为clock()函数的返回值类型 6 double durtime;
方法一:求多项式,展开式:
1 double power(double x,int i ) 2 { 3 if(i) 4 return x*power(x,i-1); 5 return; 6 } 7 double F1(int num,int a[],double x) 8 { 9 int i,p; 10 p=a[0]; 11 for(i=1;i<num;i++) 12 { 13 p+=a[i]*power(x,i); 14 } 15 return p; 16 }
函数二:求多项式的展开式,优化过后的算法;
1 double F2(int num,int a[],double x) 2 { 3 int i,p; 4 p=a[num-1]; 5 for(i=num-1;i>0;i--) 6 { 7 p=a[i-1]+x*p; 8 } 9 return p; 10 }
主函数,调用函数,计算时间:
1 int main() 2 { 3 int i,sum; 4 int a[max_num]; 5 for(i=0;i<max_num;i++) a[i]=1; 6 start=clock(); 7 sum=F1(max_num,a,1.1); 8 stop=clock(); 9 durtime=(double)(stop-start)/CLK_TCK/max_num; 10 printf("ticks=%.1f\n",(double)(stop-start)); 11 printf("durtime=%6.2e\n",durtime); 12 13 14 start=clock(); 15 sum=F2(max_num,a,1.1); 16 stop=clock(); 17 durtime=(double)(stop-start)/CLK_TCK/max_num; 18 printf("ticks=%.1f\n",(double)(stop-start)); 19 printf("durtime=%6.2e\n",durtime); 20 return 0; 21 22 23 24 }
运行程序后结果:
看结果,基本能比较相关算法的优劣。一般来说,运行时间的数据都很小,可以将数据取比较大,这样就比较清楚的看出来结果,比如这里的max_num 取10000的
第一次写,菜鸟,欢迎各位大神指正。