【发布时间】:2018-09-04 22:26:10
【问题描述】:
我正在尝试为排序功能计时,非常简单的东西。代码如下:
clock_t start_t, end_t, total_t;
start_t = clock();
sort();
end_t = clock();
total_t = (double)(end_t - start_t) / CLOCKS_PER_SEC;
printf("sort time: %le", (double)total_t);
你可以说这行得通。但是,无论需要多长时间,我都会得到一个整数输出。如果排序 1M 元素打印出来
sort time: 1.000000e+00
排序 2M 个元素会打印出来
sort time: 2.000000e+00
然后对两者之间的任何元素值进行排序将打印这两个输出之一。 1.3M 个元素显然也需要 1.000000e+00 秒。
为什么会发生这种情况,更重要的是我该如何解决?
【问题讨论】:
-
命名变量
xxxx_t具有高度误导性,因为它是命名类型的约定。 -
直截了当?不,不是。不同的平台为
clock()分配不同的语义, -
您将输出四舍五入为每秒的时钟数,因此您的输出将始终四舍五入为秒 total_t = (double)(end_t - start_t) / CLOCKS_PER_SEC;应该是 total_t = (double)(end_t - start_t);
-
@guilleamodeo
(double)(end - start) / CLOCKS_PER_SEC始终为您提供两次之间经过的秒数 - 另一方面,(double)(end - start)不保证是任何有用的值。 -
糟糕!我不是那个意思,我在那里遗漏了一大块(当我按下键粘贴而不是粘贴时它必须发送帖子)。我的意思是您需要将 CLOCKS_PER_SEC 也转换为 double...