2011-12-25 16 views
0

我正在對排序速度進行一些測量,並測量了對100萬個浮點值進行排序所需的時間,所有這些時間都在[0,1 ]通過使用標準std :: sort在<algorithm>.中進行排序在我的硬件上,帶有6 GB Ram的intel core i5,下面的代碼告訴我它大約需要1164.188毫秒。但是,我懷疑這是否正確,並想問這個測量是否正確。請看下面的代碼,知道我是如何得到1164.188ms通過排序在算法庫中排序100萬個浮點數的測量時間

#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(); 



} 
+3

你爲什麼認爲這是錯的? – templatetypedef 2011-12-25 18:51:22

+0

sort()是什麼實現?它不是任何標準庫 - 可能是Windows特定的?它如何知道如何比較元素? – wallyk 2011-12-25 18:54:00

+0

@wallyk現在Introsort非常普遍。或者至少是一種深度感知的方法。並且比較是模板化的。這裏<。 – 2011-12-25 18:58:04

回答

1

我想補充一個檢查的fscanf(f, "%f,", &a[count]);的返回值,以確保它讀取和轉換的數值。

時序邏輯顯得很響。請注意,它正在測量已用時間。至於準確測量算法,只有當機器輕載或更少時纔會出現這種情況。多次運行可以給出時間有效性的指示:如果接近,那麼它們可能是準確的。如果變化很大(> 25%),則其他系統操作會中斷計算。

+0

你可以在你的機器上運行這個,告訴我你是否得到相同或類似的結果 – Programmer 2011-12-26 11:07:51

+0

@程序員:我沒有windows,只有Linux。 – wallyk 2011-12-26 18:14:01

+0

最後一個問題,我接受你的答案。要檢查fscanf的返回值val,我們只需要執行int val = fscanf();如果(val == EOF)拋出錯誤? – Programmer 2011-12-26 18:38:43