Измерение времени для сортировки 1 миллиона с плавающей запятой между 0 и 1 по сортировке в библиотеке алгоритмов - PullRequest
0 голосов
/ 25 декабря 2011

Я делаю некоторые измерения скоростей сортировки и измерял время, необходимое для сортировки 1 миллиона значений с плавающей запятой, все между [0,1], используя стандартный std :: sort в <algorithm>. На моем оборудовании, Intel Core i5 с 6 ГБ оперативной памяти, приведенный ниже код показывает мне, что это занимает примерно 1164,188 миллисекунд. Однако я сомневаюсь в правильности этого и хочу спросить, является ли это измерение правильным. Пожалуйста, смотрите код ниже, чтобы узнать, как я получил 1164,188мс

#include<algorithm>
#include<iostream>
#include<windows.h>
using namespace std;
void main(){

    const int N = 1000000;
    FILE *f;
    f = fopen("invertedList.txt","r");
    if( f == NULL){
            printf("File not found\n");
            system("pause");
            exit(1);
    }
    int count = 0 ;
      //read input from a file
    float* a = (float*)malloc(N * sizeof(float));
    for( int i =0 ; i < N ; i++){

        fscanf(f, "%f,", &a[count]);

        count++;
    }
    fclose(f);
      //start the clock
    __int64 ctr1 = 0 , ctr2 = 0 , freq = 0 ;
    QueryPerformanceFrequency((LARGE_INTEGER *) &freq);
    QueryPerformanceCounter((LARGE_INTEGER *) &ctr1);

    sort(a,a+N);

    QueryPerformanceCounter((LARGE_INTEGER *)&ctr2);//stop clock
    double ans = ((ctr2 - ctr1) * 1.0 / freq);
    printf("The time elapsed in milliseconds is %f\n",(ans*1000));

    FILE *tow;
    tow = fopen("writesort.txt","w");
    for(int i =0 ; i< N;i++){
        fprintf(tow,"%f,",a[i]);
    }
    free(a);
    fclose(tow);
    getchar();



}

1 Ответ

1 голос
/ 26 декабря 2011

Я бы добавил проверку к возвращаемому значению fscanf(f, "%f,", &a[count]);, чтобы убедиться, что он прочитал и преобразовал значение.

Звучит логика синхронизации. Обратите внимание, что он измеряет прошедшее время. Что касается точного измерения алгоритма, это будет верно только в том случае, если машина слегка загружена или меньше. Многократные прогоны могут дать представление о достоверности времени: если близко, то они, вероятно, точны. Если есть большие отклонения (> 25%), то другие системные операции нарушают вычисления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...