时差为零秒

时间:2016-04-25 23:32:30

标签: c time

这里我试图计算完成合并排序所需的时间。但是开始和结束之间的差异显示零下降。我不知道问题是什么。为方便起见我只发布主要内容计算时间的函数。

#include<stdio.h>
#include<time.h>
int main(){
    clock_t start,end,diff;
    start=clock();
    int arr[4]={12,2,56,1};
    int i;
    printf("beforn sort\n");
    printf("\n-------------\n");
    for(i=0;i<4;i++){
        printf("%d ",arr[i]);
    }
    printf("\n \n");
    Merge_sort(arr,0,3);
    printf("after merge sort\n");
    printf("\n-------------\n");
    for(i=0;i<4;i++){
        printf("%d ",arr[i]);
    }
    printf("\n");
    end=clock();
    diff=(double)(end-start)/CLOCKS_PER_SEC;
    printf("total time is %f sec ",diff);
}

2 个答案:

答案 0 :(得分:2)

clock()返回自程序启动以来经过的时钟周期数。那么

start=clock();

给出从启动的程序到调用clock()的时钟周期数。 这样可以在排序之前给你时钟滴答。这是时钟滴答数,而不是秒数。

排序后

end=clock()

给出从启动的程序到调用clock()的时钟周期数。 这样可以在排序后为您提供时钟滴答。这是时钟滴答数,而不是秒数。

现在end-start给出了排序过程中的时钟滴答数。(这也不是几秒钟)

  

(时钟滴答数)/(一秒钟内的时钟滴答数)=以秒为单位的时间

(end-start)/CLOCKS_PER_SEC在几秒钟内为排序过程提供所需的时间。但在C中,这给出了一个整数。因此,为了精确度,它必须加倍。这给了。

double diff;
diff=(double)(end-start)/CLOCKS_PER_SEC;

答案 1 :(得分:1)

CLOCKS_PER_SEC被定义为类型clock_t,在N1256 7.23.1中被定义为算术类型。它表明clock_t可能是整数类型。

我想您应该将diff的类型更改为double。这样做也会使printf()的最后一次使用更正。