C-度量函数时间执行

C-度量函数时间执行,c,function,time,execution,measure,C,Function,Time,Execution,Measure,我想测量插入排序函数的弹性时间。但是,结果是0.0000000秒。我能做什么?我试过其他时间图书馆。不幸的是,它没有。。。谢谢我又写了一遍 #include <stdio.h> #include <string.h> #include <stdlib.h> #include <time.h> int main(void) { int number=1; if(number == 1) { struct timeval st

我想测量插入排序函数的弹性时间。但是,结果是0.0000000秒。我能做什么?我试过其他时间图书馆。不幸的是,它没有。。。谢谢我又写了一遍

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>

int main(void) 
{
  int number=1;
  if(number == 1)
  {
     struct timeval start, end;
     gettimeofday(&start, NULL);

     for(int i=0; i<5;i++)
     {
     insertion_sort( kelime, n );   
     }
     gettimeofday(&end, NULL);

     printf("Elapsed time is %.10f",(end.tv_sec * 1000000 + end.tv_usec)-   (start.tv_sec * 1000000 + start.tv_usec));
 }
#包括
#包括
#包括
#包括
内部主(空)
{
整数=1;
如果(数字==1)
{
结构timeval开始、结束;
gettimeofday(&start,NULL);

for(int i=0;i
time
的粒度只有秒。而您的代码最差可能是微秒或毫秒。请使用具有微秒粒度的
gettimeofday


但请注意,
time
gettimeofday
都提供了墙时间。如果需要CPU时间,可以使用
clock

您的计算和打印是:

 printf("Elapsed time is %.10f",
        (end.tv_sec * 1000000 + end.tv_usec) -
        (start.tv_sec * 1000000 + start.tv_usec));
您正在尝试以浮点格式打印整数值;这不会带来幸福感。假设整数算术没有溢出,则可以使用:

 printf("Elapsed time is %.6f",
        ((end.tv_sec * 1000000 + end.tv_usec) -
        (start.tv_sec * 1000000 + start.tv_usec)) / 1000000.0);
这将为您提供一个浮点值,以便使用浮点格式打印。如果
gettimeofday()
仅支持6位(默认为6位小数,但清晰性通常很好),则请求10位小数是没有意义的

您还可以使用:

 printf("Elapsed time is %.6f",
        ((end.tv_sec * 1000000.0 + end.tv_usec) -
         (start.tv_sec * 1000000.0 + start.tv_usec)) / 1000000);

关键是要确保在浮点运算中完成足够的计算。

我尝试过。但是,我没有编写代码。我该怎么办?错误]'t0'未声明(首次在此函数中使用)[注意]对于[Error]'t1'未声明的每个函数,每个未声明的标识符只报告一次(首次在此功能中使用)显示所有代码。您没有在该代码段中声明
t0
t1
。如果这确实是您的所有代码,那么如果不是编译错误,您还希望看到什么?您需要将t0和t1声明为struct timevals。请注意,Windows没有此功能。您可以使用时钟,但对于Windows,ticker仅以64hz的频率运行,因此分辨率仅为15.625毫秒。您可以使用,但这仅限于Windows。
%.10f
。字段不是浮点数,而是长点数(通常)。试试
%ld
。看看
rdtsc
的内在特性。@Mr.Gurbuz:试着排序5000个元素,而不是仅仅5个。或者加粗,选择50000个,甚至500000个。不要太高,否则堆栈空间可能会用完(我不确定如果你在Wijndows上,500.000个元素是否安全).基本上,对5个元素进行排序不会花费足够长的时间来注册。