2016-03-15 38 views
0

我想知道我的代碼中的quickSort函數的時間,我用clock()它得到0 ..我也嘗試使用chrono,它仍然讓我0。 我也讓我的數組很大。 我不知道我的代碼是否錯誤!如何計算函數的時間?

這是我的代碼

#include <iostream> 
#include <chrono> 
#include <ctime> 
#include <ratio> 

using namespace std; 
using namespace chrono; 

void quick_sort(int *arr,int left,int right){ 

    int i=left,j=right; 
    int pivot=arr[(left+right)/2]; 
    while(i<=j){ 
     while(arr[i]<pivot) 
      i++; 
     while(arr[j]>pivot) 
      j--; 
     if(i<=j){ 
      swap(arr[i],arr[j]); 
      i++; 
      j--; 
     } 
    } 
    if(left<j) 
     quick_sort(arr,left,j); 

    if(right>i) 
     quick_sort(arr,i,right); 


} 


int main() 
{ 
    int arr[30]={4,2,5,3,8,9,7,10,54,23,65,78,10,44,56,91,75,79,42,81,10,57,23,651,78,100,47,50,71,715}; 
    high_resolution_clock::time_point t1 = high_resolution_clock::now(); 
    quick_sort(arr,0,29); 
    high_resolution_clock::time_point t2 = high_resolution_clock::now(); 
    duration<double>time_span = duration_cast<duration<double> >(t2-t1); 
    cout<<"it takes "<<time_span.count()<<" seconds"<<endl; 

    return 0; 
} 
+0

申請秒錶開始/結束 –

+0

A [標杆示例](HTTP:/ /stackoverflow.com/a/35940041/5470596)另一個問題。 – YSC

+0

使用C++測量函數的執行時間https://stackoverflow.com/a/40380118/6180077 –

回答

0

簡單實現:

#include <iostream> 
#include <iomanip> 
#include <string> 

// benchmak 
#include <limits> 
#include <random> 
#include <chrono> 
#include <algorithm> 
#include <functional> 
class Clock 
{ 
    std::chrono::time_point<std::chrono::steady_clock> _start; 

public: 
    static inline std::chrono::time_point<std::chrono::steady_clock> now() { return std::chrono::steady_clock::now(); } 

    Clock() : _start(now()) 
    { 
    } 

    template<class DurationUnit> 
    std::size_t end() 
    { 
     return std::chrono::duration_cast<DurationUnit>(now() - _start).count(); 
    } 
}; 

使用

int main() 
{ 
    { 
     Clock clock; 
     business(); 
     const double unit_time = clock.end<std::chrono::nanoseconds>(); 
     std::cout << std::setw(40) << "business(): " << std::setprecision(3) << unit_time << " ns\n"; 
    } 
}