Так вот что я и сделал. Сначала у нас есть мой простой код сортировки вставки. Я решил рассчитать это. Вот как выглядит код:
#include<stdio.h>
#include<time.h>
int insertion_sort(int arr[], int len){
int i;
int key;
for(i = 1; i < len; i++){
key = arr[i];
int j = i - 1;
while(arr[j] >= key && j >= 0){
arr[j + 1] = arr[j];
j--;
}
arr[j + 1] = key;
}
}
int main(){
int arr[5] = {3, 2, 5, 1, 4};
clock_t beg = clock();
insertion_sort(arr, 5);
clock_t end = clock();
int i;
for(i = 0; i < 5; i++)
{
printf("%d\n", arr[i]);
}
double deltaT = (double)(end - beg)/CLOCKS_PER_SEC;
printf("Time take is: %lf seconds\n", deltaT);
}
Итак, затем я компилирую и запускаю свой код. Выход:
1
2
3
4
5
Time take is: 0.000002 seconds
Тогда я решил, что таймер секунд слишком мал, и вместо этого нам нужно использовать миллисекунды. Поэтому я умножаю расчет на тысячу, как:
deltaT = (end - beg) * 1000 / CLOCKS_PER_SEC
, а затем изменил соответствующий printf.
Время считывания остается неизменным при 2 мкс. Настоящая магия случается, когда я повторно удаляю 1000 и возвращаю код обратно к старой форме.
На этот раз время чудесным образом меняется на довольно медленные 3 мкс. В чем причина этого резкого изменения. Мы ожидаем, что наши машины будут работать одинаково при одинаковых входах, но почему производительность меняется на одном и том же входе, когда я пробую это?