2015-08-26 4 views
1
{ 
    clock_t t1, t2; 
    double time1 = 0; 
    t1 = clock(); 
    bubbleSort(data, n); 
    t2 = clock(); 
    time1 = difftime(t2,t1); 
    cout<<"Bubble Sort: \n"; 
    for (int y = 0; y<n; y++) 
    { 
     cout<<data[y]<<"\t"; 
    } 
    cout<<endl; 
    cout<<"Algorithm Runtime is: "<<time1<<" milliseconds."; 
} 

Я пытаюсь получить время работы в миллисекундах, но я всегда получаю 0. Я получаю только время работы при вводе 1000 + случайных чисел. То, что я хочу получить, - это время работы низких чисел. Может кто-нибудь мне помочь.C++ время работы в миллисекундах

Я пробую все другие способы, которые я вижу на этом форуме, но, похоже, это не работает для меня. Возможно, я делаю это неправильно.

Благодарим вас в Advance.

+0

Что 'difftime' делать? – ForEveR

+2

Существует хорошая вероятность, что для выполнения кода требуется всего лишь миллисекунды. Вы должны запустить его в цикле, измерить и принять среднее значение (в микросекундах). –

+0

@ForEveR мой проф. сказал, что он вычисляет разницу времени между t2 и t1. – Aaaaaaa

ответ

4

Итак, чтобы разобраться - difftime принимает два параметра time_t, каждый из которых представляет измерение текущего времени за считанные секунды с эпохи. Однако clock дает некоторое количество процессорного времени, которое не является секундой. Как указано на странице руководства:

Возвращаемое значение - это время процессора, используемое в качестве clock_t; чтобы получить количество секунд, разделите на CLOCKS_PER_SEC.

Таким образом, вы явно используете эти функции неправильно.

При этом важно также обеспечить, чтобы код работал достаточно долго, чтобы его можно было измерить и чтобы время работы не было меньше разрешения используемого метрика времени. Вы можете просто вычесть значения, возвращаемые с clock(), и разделить на CLOCKS_PER_SEC (example). Если это все равно дает нуль, тогда запустите алгоритм в цикле.

+0

Спасибо, сэр. Пример действительно помог мне. – Aaaaaaa

+0

@ A.Rvyn добро пожаловать. Btw, если алгоритм - это единственное, что содержит программа, вы также можете использовать команду time (http://linux.die.net/man/1/time), которая запускает программу и печатает время. Но если вам нужно измерить время изнутри кода, это не поможет. –

4

вы можете сделать измерение времени, которое намного точнее. (наносекунд). Для компиляции требуется C++ 11.

Пример:

#include <chrono> 
using namespace std; 

{ 

    auto t1 = chrono::high_resolution_clock::now(); 
    bubbleSort(data, n); 
    auto t2 = chrono::high_resolution_clock::now(); 
    chrono::duration<int64_t,nano> elapsed = t2 - t1; //if you want milliseconds you should use: std::chrono::duration<double,milli> 

    cout << "Bubble Sort: \n"; 
    for (int y = 0; y<n; y++) { 
     cout << data[y] << "\t"; 
    } 
    cout << endl; 
    cout << "Algorithm Runtime is: " << elapsed.count() << " nanoseconds."; 

} 

Я надеюсь, что мой ответ поможет вам.

+0

Более точное измерение времени действительно теоретически возможно. Но в реальной жизни это не будет, если вы получите значительно меньше клещей, чем считаете себя. Несколько лет назад я также наивно полагал, что точность наносекундного интервала времени от хронометра будет точной. К сожалению, они не были, однако, что сделало эту первую попытку сравнения бенчмаркинга с кодом C++ неудачным. Другое соображение заключается в том, что реализация материала с time.h, скорее всего, намного более зрелая и, следовательно, скорее менее глючная, чем сам код реализации хроно. –

+0

Ваш код не имеет главной функции !!!!!!!!!!!!!! – Lilo