Сроки пузырьковой сортировки - PullRequest
1 голос
/ 11 февраля 2011

Мне нужно определить, сколько времени займет сортировка пузырьков, и напечатать, сколько времени это заняло. В моей программе напечатанное время всегда равно 0,00 секундам. Может кто-нибудь сказать мне, что я делаю не так?

int main()
{
    srand((unsigned)time(NULL));
    int arr[5000], arr2[5000]; 
    int i;
    time_t start, end;
    double timeDiff;

    for(i=0; i < 5000; i++)
    {
        arr[i] = rand() % 100 + 1;
        arr2[i] = arr[i];
    }

    cout << "Here is the initial array:" << endl;
    printArray(arr, 5000);

    time(&start);
    bubbleSort(arr, 5000);
    time(&end);
    timeDiff = difftime(end, start);

    cout << "\nHere is the array after a bubble sort:" << endl;
    printArray(arr, 5000);
    cout << fixed << setprecision(2) << "\nIt took " << timeDiff << " seconds to bubble sort the array." << endl;

    system("pause");
    return 0;
}

Ответы [ 3 ]

6 голосов
/ 11 февраля 2011

Я думаю, вам нужно использовать что-то, что имеет немного большую точность, чем difftime (которое сообщает только в секундах):

См .: Разница во времени в C ++ для получения дополнительной информации.

4 голосов
/ 11 февраля 2011

Выполняется быстрее, чем процессорные часы, необходимые для обновления. То, что вам нужно сделать, это выполнить сортировку пару миллионов раз, отсчитать время и поделить время на количество итераций (убедитесь, что вы используете double для максимальной точности, которую можете получить. Так что в основном это что-то вроде:

const int runs=1000000;
time(&start);

for(int r=0;r<runs;++r)
    bubbleSort(arr, 5000);

time(&end);
timeDiff = difftime(end, start);

double realduration=timeDiff/(double)runs;
0 голосов
/ 11 февраля 2011

5000 для малого, чтобы зарегистрироваться, вам нужно выполнить весь процесс сортировки 100 или 1000 раз, а затем разделить на это число, чтобы получить время

Мне сказали, что для того, чтобы получить хорошее время, вам нужнозапустить программу от 5 до 10 секунд

...