这里我试图计算完成合并排序所需的时间。但是开始和结束之间的差异显示零下降。我不知道问题是什么。为方便起见我只发布主要内容计算时间的函数。
#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);
}
答案 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()
的最后一次使用更正。