2011-02-11 82 views
1

我必須等待泡泡分類需要多長時間並打印需要多長時間。在我的程序中,打印的時間總是爲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; 
} 
+0

這聽起來像time_t的粒度太大,無法捕獲您的排序程序所花費的時間(即「泡泡排序「在不到1秒內執行)。您需要多次運行例程才能註冊足夠長的時間。 – 2011-02-11 20:29:51

+0

請注意,冒泡排序在計算機科學中沒有地位,除了作爲例子說明如何不做事。 – 2011-02-12 05:05:07

+0

這是一堂課的作業。我們必須創建一個5000的數組,然後用數字1-100填充它,然後在其上運行兩種不同的排序方法。 – Joshua 2011-02-12 18:02:21

回答

4

它執行的速度比CPU時鐘更新要快。你需要做的就是執行你的排序幾百萬次,然後用迭代次數來劃分時間(確保你使用雙精度來獲得最高精度,所以基本上是這樣的:

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; 
6

我認爲你需要使用的東西比difftime多一點精密(只在幾秒鐘內報告):

參見:Time difference in C++以獲取更多信息。

0

5000是小到註冊需要運行整個分選過程則100或1000倍,這個數字除以得到一些時間

有人告訴我,要得到你需要有一個良好的時間有點該程序運行5到10秒