【发布时间】:2020-02-17 15:19:21
【问题描述】:
我们正在研究各种排序算法的性能,并实现了我们的归并排序版本。我们试图用不同的输入来测量运行时间,但是当我们运行如下所示的 main() 程序时,我们得到了不同的时间结果。
例如,下面的clock()函数输出在大输入时可以显示30秒,但是当我们使用手机使用实际计时器时,主程序大约需要2分钟。
我们在这里缺少什么?我们没有以正确的方式使用clock()函数吗?为什么会有这么大的差异(1.5 分钟)?
谢谢
int n;
cout << "Enter n - lenght of array" << endl;
cin >> n;
vector<int> v(n);
for(int i = 0; i < n; ++i)
{
v[i] = i;
}
auto rng = default_random_engine {};
std::shuffle(std::begin(v), std::end(v), rng);
clock_t begin = clock();
sort(v);
cout << "done";
clock_t end = clock();
cout <<"total time : " << (double)(end-begin) / CLOCKS_PER_SEC<<endl;
return 0;
【问题讨论】:
-
我看不出它会造成 90 秒的差异,但
shuffle需要多长时间? -
您是在用手机测量整个程序的执行情况,还是只是排序?由于您只测量排序,因此使用
clock。 -
除了已经提到的 - 我认为 - 使用
clock()你测量 CPU 时间,而不是挂钟时间。这意味着您的程序可以运行 2 分钟,但实际上它只使用 cpu 1 分钟左右。还要确保您正在运行优化的构建。 -
n在你的测试中有多大?您不会按值将该向量传递给您的排序函数,是吗?
标签: c++ algorithm sorting mergesort clock