这是简单的程序(数组排序):
#include <stdio.h>
#include <conio.h>
#include <array>
#include <algorithm>
#include <chrono>
typedef unsigned int myInt;
static void shellSort(myInt arr[], const myInt length) {
if (length < 2) {
return;
}
myInt i, j, step;
myInt tmp;
for (step = length / 2; step > 0; step /= 2) {
for (i = step; i < length; i++) {
tmp = arr[i];
for (j = i; j >= step; j -= step) {
if (tmp < arr[j - step]) {
arr[j] = arr[j - step];
}
else {
break;
}
}
arr[j] = tmp;
}
}
}
void main() {
const int arrSize = 2000;
std::array<myInt, arrSize> arr;
std::chrono::high_resolution_clock::time_point timeStart, timeEnd;
//Array filling and shuffling
for (int i = 0; i < arrSize; i++) {
arr[i] = i + 1;
}
std::random_shuffle(arr.begin(), arr.end());
//Array sorting and time measurement
timeStart = std::chrono::high_resolution_clock::now();
shellSort(arr._Elems, arrSize);
timeEnd = std::chrono::high_resolution_clock::now();
printf("%llu", std::chrono::duration_cast<std::chrono::nanoseconds>(timeEnd - timeStart).count());
_getch();
}
并返回0. 0纳秒,用于排序2000个元素的数组。看起来很奇怪。我注意到它发生在函数执行时间很短但0纳秒时 - 绝对是谎言。
Visual Studio 2013,Build - Release,Platform x64,Win10 x64
请告诉我,为什么会发生这种情况?
答案 0 :(得分:4)
C ++标准不需要std::high_resolution_clock
的最低分辨率。
20.11.7.3
类high_resolution_clock [time.clock.hires]类的对象 high_resolution_clock表示具有最短滴答周期的时钟。 high_resolution_- clock可以是system_clock的同义词 steady_clock。
强调:可能是system_clock或steady_clock的同义词
您需要检查编译器的文档。您的编译器std::high_resolution_clock
的分辨率可能太粗糙,无法测量如此小的间隔,因此您测量的开始和结束时间是相同的。