2017-04-01 9 views
0

私は挿入ソートの時間をかけたいです。私はそれが動作するようなコードを持っているが、(それがループ内でだから)それはループ内のすべてのソートに一度印刷した場合:C++クロックが異なる値を返すのはなぜですか?

clock_t start; 
double duration; 
start = clock(); 

int j, temp; 

for (int i = 0; i < NumberOfLines; i++) { 
    j = i; 
    while (j > 0 && arr[j - 1] < arr[j]) { 
     temp = arr[j]; 
     arr[j] = arr[j - 1]; 
     arr[j - 1] = temp; 
     j--; 
    } 
    duration = (clock() - start)/(double)CLOCKS_PER_SEC; 
    cout<<"Sorting took: "<< duration<<" seconds"<<'\n'; 
} 
duration = (std::clock() - start)/(double)CLOCKS_PER_SEC; 
cout << "Please Work: " << duration << " seconds" << '\n'; 

しかし、私はループ内coutコメント場合は、撮影した0時間を返します。 :

duration = (clock() - start)/(double)CLOCKS_PER_SEC; 
    //cout<<"Sorting took: "<< duration<<" seconds"<<'\n'; 
} 
duration = (std::clock() - start)/(double)CLOCKS_PER_SEC; 
cout << "Please Work: " << duration << " seconds" << '\n'; 

なぜですか?

+2

最適化。それを防ぐために、ソートされた配列afterループを出力します。 –

+0

あなたのループは、コンソールやファイルに接続されているストリームに送信する時間よりもはるかに短い時間で実行されるため、私は賭けるでしょう。そして、通常、クロックの細かさは、単純なループの数百回の反復をキャッチするほど良くはありません。 –

+0

@yurikilochekうん、それは私がしなければならないかもしれない。 – cparks10

答えて

0

enter image description here

今日のCPUのはあまりにも高速です。

このソートコードでは、作業負荷をシミュレートするために、遅延時間をSleep(rand() % 100)としています。

// sort program 
// uses Sleep(rand() % 100) to delay time to simulate work load. 
// 

#include <time.h> 
#include <iostream> 
#include <windows.h> 
using namespace std; 

int main(){ 

    clock_t start=0, stop=0,start2=0,stop2=0; 
    double duration=0,duration2=0, totalDurations=0.0; 
    int i=0,j=0, temp=0; 
    int NumberOfLines = 10; 
    int arr[2001] = { 0 }; 

    cout<<"using Sleep(rand() % 100) to delay time to simulate work load. \n\n"; 

    // create random seed 
    srand(time(0)); 

    // fill arr[ ] with random numbers 
    for (int r = 0; r < NumberOfLines; r++){ 
     arr[r] = rand() % 1234; 
    } 

    // start total sort clock 
    start = clock(); 

    // begin sorting loop 
    for (i = 0; i < NumberOfLines; i++) { 

     j = i; 

     // start single item sort clock 
     start2 = clock(); 
     Sleep(rand() % 100); 
     //cout << "(" << arr[i] << " "; 

     // do actual single item sorting 
     while ((j > 0) && (arr[j - 1] < arr[j])) { 
      temp = arr[j]; 
      arr[j] = arr[j - 1]; 
      arr[j - 1] = temp; 
      j--; 
     } 

     // stop single item sort clock 
     stop2 = clock(); 

     // calculate single item sort time 
     duration2 = (stop2 - start2)/(double)CLOCKS_PER_SEC; 
     totalDurations += duration2; 

     // display Single item sorting results 
     cout << "Single item sorting took: " << duration2 << " seconds" << '\n'; 
     //cout << " " << arr[i] << ") ,"; 

    } 

    // stop total sort clock 
    stop = clock(); 

    // calculate total sort time 
    duration = (stop - start)/(double)CLOCKS_PER_SEC; 

    // display total sorting results 
    cout << '\n'; 
    cout << "Total Sorting took: " << duration << " seconds" << " (td.add+= "; 
    cout<<" "<< totalDurations <<", error margin +-) \n"; 

    cout << " \nPress any key to continue\n"; 
    cin.ignore(); 
    cin.get(); 

    return 0; 
} 
関連する問題