我正在尝试测量我的mergesort实现的运行时间,但是chrono:high_resolution_clock产生不一致的结果。以下是我的主要功能(为简洁起见,省略了主要调用的两个功能):
int main()
{
int size = 50000;
int arr[size] = {};
random_array(arr, size);
int arr_size = sizeof(arr)/sizeof(arr[0]);
auto start = chrono::high_resolution_clock::now();
mergeSort(arr, 0, arr_size - 1);
auto finish = chrono::high_resolution_clock::now();
chrono::duration<double> elapsed = finish - start;
cout << "\nElapsed time: " << elapsed.count() * (1000) << " ms\n\n";
return 0;
}
在多次运行可执行文件后,输出大约为15 ms或恰好为0 ms。 15 ms似乎是合理的,但是为什么在两次执行之间随机产生0 ms?
Windows命令提示符处的示例输出:
C:\Users\Spencer\Desktop>g++ -o lab1 lab1.cpp
C:\Users\Spencer\Desktop>lab1
Elapsed time: 0 ms
C:\Users\Spencer\Desktop>lab1
Elapsed time: 0 ms
C:\Users\Spencer\Desktop>lab1
Elapsed time: 15.653 ms
C:\Users\Spencer\Desktop>lab1
Elapsed time: 15.515 ms
C:\Users\Spencer\Desktop>lab1
Elapsed time: 0 ms
C:\Users\Spencer\Desktop>lab1
Elapsed time: 0 ms
C:\Users\Spencer\Desktop>lab1
Elapsed time: 15.487 ms