почему алгоритм сортировки занимает ноль секунд

#c #time

#c #время

Вопрос:

вот алгоритм

 #include<iostream>
#include<Windows.h>
#include<time.h>
using namespace std;
int main(){
    int a[10]={12,3,5,2,7,80,10,1,16,30};
    long ts,te;
    srand(::GetTickCount());
    ts=clock();
     for (int i=0;i<10;i  ){
       for (int j=9;j>i;j--){

                  if (a[j]<a[j-1]){

                   int t=a[j];a[j]=a[j-1];a[j-1]=t;

                  }

       }



     }

       te=clock();
       cout<<" time elapsed "<<te-ts<<endl;




 return 0;
}
  

но я удивлен, потому что он выдает мне ноль на выходе, я измеряю время, прошедшее от начала кода до завершения, и почему? мой компьютер не является так называемым суперкомпьютером, и что не так в этом фрагменте кода?

Комментарии:

1. пожалуйста, убедитесь, что он не возвращает –1 .

2. каково разрешение вызова clock ()? сортировка 10 чисел должна занимать максимум несколько миллисекунд….

3. Вы должны использовать clock_t для ts и te (которые могут быть длинными, но все же …)

4. даже пузырьковая сортировка выполняется быстро, если n мало

Ответ №1:

Если вы не использовали перфокарты для написания своей программы, вас не должно удивлять, что сортировка 10 чисел занимает менее одного тика. Если вам нужен более точный профиль вашего кода, используйте миллисекунды, это должно дать вам лучшее представление.

Самая внутренняя инструкция в циклах выполняется 100 раз — это ничто по сравнению даже с процессорами низкого уровня в наши дни.

РЕДАКТИРОВАТЬ: Я тестировал код со 100000 числами, это 10 ^ 10 итераций внутри цикла for, и это заняло всего 3 секунды.

Комментарии:

1. Для современного компьютера даже миллисекунд будет слишком мало, чтобы измерить сортировку 10 чисел. Либо используйте большую выборку, либо используйте микросекундный таймер для измерения.

2. @KerrekSB я думаю, что это все, clock () возвращает миллисекунды, но это не может занять больше указанного вами разрешения.

Ответ №2:

Вас не должно удивлять, что сортировка десяти чисел занимает менее одного такта. Повторите сортировку много раз, чтобы получить значимые временные интервалы.

Моему компьютеру требуется 0,18 секунды, чтобы выполнить 1 миллион повторений вашего цикла с точно таким же начальным массивом. Следовательно, каждая сортировка занимает около 180 микросекунд. Это слишком тонко, чтобы измерить парой clock() вызовов.

Комментарии:

1. Но вы скремблировали массив между его сортировкой?

2. @UncleBens: Я сделал. Тест был запущен 1 000 000 раз с одним и тем же начальным массивом.

Ответ №3:

Вы можете получить более точное измерение времени, используя таймер с высоким разрешением. смотрите http://www.songho.ca/misc/timer/timer.html Время, которое вы пытаетесь измерить, исчисляется микросекундами!