#include <iostream>
#include <algorithm>
#include <chrono>
#include <thread>
#include <vector>
using namespace std;
#define ITERATIONS 2000
#define MEASURE( func ) \
{ \
chrono::system_clock::time_point a, b; \
this_thread::sleep_for( chrono::milliseconds( 2000 ) ); \
a = chrono::system_clock::now(); \
for ( unsigned i = 0; i < ITERATIONS; i++ ) { \
for ( unsigned j = 0; j < ITERATIONS; j++ ) { \
func(); \
} \
} \
b = chrono::system_clock::now(); \
cout << #func << " \t: " << chrono::duration_cast< chrono::milliseconds >( b - a ).count() << " ms." << endl; \
}
void test_qsort() {
int myints[] = { 32, 71, 12, 45, 26, 80, 53, 33 };
qsort( myints, sizeof( myints ) / sizeof( myints[0] ), sizeof( int ), []( const void * a, const void * b ){ return ( *(int *)a - *(int *)b ); } );
}
void test_std_sort() {
int myints[] = { 32, 71, 12, 45, 26, 80, 53, 33 };
vector <int> myvector( myints, myints + 8 );
sort( myvector.begin(), myvector.end() );
}
int main()
{
MEASURE( test_std_sort );
MEASURE( test_qsort );
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8YWxnb3JpdGhtPgojaW5jbHVkZSA8Y2hyb25vPgojaW5jbHVkZSA8dGhyZWFkPgojaW5jbHVkZSA8dmVjdG9yPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCiNkZWZpbmUgSVRFUkFUSU9OUyAyMDAwCgojZGVmaW5lIE1FQVNVUkUoIGZ1bmMgKQkJCQkJCQkJCQkJCVwKCXsJCQkJCQkJCQkJCQkJCQkJXAoJCWNocm9ubzo6c3lzdGVtX2Nsb2NrOjp0aW1lX3BvaW50IGEsIGI7CQkJCQkJXAoJCXRoaXNfdGhyZWFkOjpzbGVlcF9mb3IoIGNocm9ubzo6bWlsbGlzZWNvbmRzKCAyMDAwICkgKTsJCVwKCQlhID0gY2hyb25vOjpzeXN0ZW1fY2xvY2s6Om5vdygpOwkJCQkJCQlcCgkJZm9yICggdW5zaWduZWQgaSA9IDA7IGkgPCBJVEVSQVRJT05TOyBpKysgKSB7CQkJCVwKCQkJZm9yICggdW5zaWduZWQgaiA9IDA7IGogPCBJVEVSQVRJT05TOyBqKysgKSB7CQkJXAoJCQkJZnVuYygpOwkJCQkJCQkJCQkJCVwKCQkJfQkJCQkJCQkJCQkJCQkJXAoJCX0JCQkJCQkJCQkJCQkJCQlcCgkJYiA9IGNocm9ubzo6c3lzdGVtX2Nsb2NrOjpub3coKTsJCQkJCQkJXAoJCWNvdXQgPDwgI2Z1bmMgPDwgIiBcdDogIiA8PCBjaHJvbm86OmR1cmF0aW9uX2Nhc3Q8IGNocm9ubzo6bWlsbGlzZWNvbmRzID4oIGIgLSBhICkuY291bnQoKSA8PCAiIG1zLiIgPDwgZW5kbDsJXAoJfQoKCnZvaWQgdGVzdF9xc29ydCgpIHsKCWludCBteWludHNbXSA9IHsgMzIsIDcxLCAxMiwgNDUsIDI2LCA4MCwgNTMsIDMzIH07Cglxc29ydCggbXlpbnRzLCBzaXplb2YoIG15aW50cyApIC8gc2l6ZW9mKCBteWludHNbMF0gKSwgc2l6ZW9mKCBpbnQgKSwgW10oIGNvbnN0IHZvaWQgKiBhLCBjb25zdCB2b2lkICogYiApeyByZXR1cm4gKCAqKGludCAqKWEgLSAqKGludCAqKWIgKTsgfSApOwp9Cgp2b2lkIHRlc3Rfc3RkX3NvcnQoKSB7CglpbnQgbXlpbnRzW10gPSB7IDMyLCA3MSwgMTIsIDQ1LCAyNiwgODAsIDUzLCAzMyB9OwoJdmVjdG9yIDxpbnQ+IG15dmVjdG9yKCBteWludHMsIG15aW50cyArIDggKTsKCXNvcnQoIG15dmVjdG9yLmJlZ2luKCksIG15dmVjdG9yLmVuZCgpICk7Cn0KCmludCBtYWluKCkKewoJTUVBU1VSRSggdGVzdF9zdGRfc29ydCApOwoJTUVBU1VSRSggdGVzdF9xc29ydCApOwoJcmV0dXJuIDA7Cn0K