【发布时间】:2020-04-02 21:56:42
【问题描述】:
我正在使用归并排序对数组进行排序。我使用 Chrono 库来测量时间,但有时结果为 0。
int main() {
srand(50000);
int A[N];
for (int i = 0; i < N; i++) {
A[i] = rand();
}
cout << "Array non ordinato\n";
Stampa(A, N);
auto start = std::chrono::system_clock::now();
QuickSort(A, 0, N - 1);
auto end = std::chrono::system_clock::now();
std::chrono::duration<double> elapsed = end - start;
cout << "\nArray ordinato\n";
Stampa(A, N);
cout << "Elapsed time in nanoseconds : "
<< chrono::duration_cast<chrono::nanoseconds>(end - start).count()
<< " ns" << endl;
cout << "Elapsed time in milliseconds : "
<< chrono::duration_cast<chrono::milliseconds>(end - start).count()
<< " ms" << endl;
cout << "Elapsed time: " << elapsed.count() << "s";
}
我用#define N 300 定义了N。
如果N 是300,则经过时间(纳秒、毫秒或秒)是0。如果我增加N,我的经过时间大于零。我也需要时间来处理小型阵列。我该如何解决?
【问题讨论】:
-
说真的,300 个项目几乎没有时间,因此结果为 0 也就不足为奇了。您应该运行数千甚至一百万左右的项目的测试。
-
系统时钟的精度是多少?在我的系统上,
system_clock::now()返回一个std::__1::chrono::time_point<std::__1::chrono::system_clock, std::__1::chrono::duration<long long, std::__1::ratio<1, 1000000>>>>,它以微秒为单位进行测量。 -
尝试 std::chrono::steady_clock 而不是 std::chrono::system 时钟。
标签: c++ sorting time mergesort chrono