Advertisement
Guest User

7vies

a guest
Oct 29th, 2009
1,105
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.15 KB | None | 0 0
  1. #include <iostream>
  2. #include <iomanip>
  3.  
  4. // Timing-related
  5.  
  6. #ifdef _MSC_VER
  7. #pragma comment(lib, "winmm.lib")
  8. #include <windows.h>
  9. struct Timer {
  10.     Timer() {
  11.         timeBeginPeriod(1);
  12.     }
  13.     ~Timer() {
  14.         timeEndPeriod(1);
  15.     }
  16.     double getTime() {
  17.         DWORD t = timeGetTime();
  18.         return t / 1000.0;
  19.     }
  20. };
  21. #else
  22. #include <sys/time.h>
  23. struct Timer {
  24.     inline double getTime() {
  25.         timeval tv;
  26.         gettimeofday(&tv, 0);
  27.         return tv.tv_sec + tv.tv_usec * 1e-6;
  28.     }
  29. };
  30. #endif
  31.  
  32. struct Timer2 : public Timer {
  33.     double t;
  34.     void start() {
  35.         t = getTime();
  36.     }
  37.     double end() {
  38.         return getTime()-t;
  39.     }
  40. };
  41.  
  42. // Helpers
  43.  
  44. Timer2 timer;
  45. using namespace std;
  46. int* copyarr(int* a0, int N)
  47. {
  48.     int* a = (int*)malloc(sizeof(int)*N);
  49.     memcpy(a, a0, sizeof(int)*N);
  50.     return a;
  51. }
  52.  
  53. // First bubblesort version
  54.  
  55. double test1(int* a0, int N)
  56. {
  57.     int i, j;
  58.     int* a = copyarr(a0, N);
  59.  
  60.     timer.start();
  61.  
  62.     for (i=0; i<N; i++) {
  63.         for (j=0; j<N - (i+1); j++) {
  64.             if (a[j] > a[j+1])
  65.                 swap(a[j], a[j+1]);
  66.         }
  67.     }
  68.  
  69.     double t = timer.end();
  70.  
  71.     free(a);
  72.  
  73.     return t;
  74. }
  75.  
  76. // Second bubblesort version
  77.  
  78. double test2(int* a0, int N)
  79. {
  80.     int i, j;
  81.     int* a = copyarr(a0, N);
  82.    
  83.     timer.start();
  84.  
  85.     for (i=0; i<N-1; i++) {
  86.         for (j=i; j>=0; j--) {
  87.             if (a[j] > a[j+1])
  88.                 swap(a[j], a[j+1]);
  89.         }
  90.     }
  91.  
  92.     double t = timer.end();
  93.    
  94.     free(a);
  95.  
  96.     return t;
  97. }
  98.  
  99. const int N = 100000; // array size
  100. int a0[N];
  101.  
  102. int main()
  103. {
  104.     int i, j;
  105.     for (i=0; i<N; i++) {
  106.         a0[i] = rand();
  107.     }
  108.  
  109.     double mint1=1e100, mint2=1e100;
  110.  
  111.     // "fair" test
  112.     for (int k=0; k<3; k++) {
  113.         double t;
  114.        
  115.         t = test1(a0, N);
  116.         mint1 = min(mint1, t);
  117.  
  118.         t = test2(a0, N);
  119.         mint2 = min(mint2, t);
  120.     }
  121.  
  122.     cout << "test1: " << mint1 << endl;
  123.     cout <<  "test2: " << mint2 << endl;
  124.     cout << setiosflags(ios::fixed) << setprecision(2);
  125.     cout << "ratio: " << mint1/mint2 << endl;
  126.  
  127.     return 0;
  128. }
  129.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement