#include #include #include #include #include using namespace std; const size_t NOT_FOUND = SIZE_MAX; const size_t ARRAY_MAX = 20000; const int SORT_TRIALS = 1000; void Sort(int ary[], size_t size); void FillArray(int ary[], size_t size); void SortTest(int ary[], size_t size); bool Validate(int ary[], size_t size); int main() { int ary[ARRAY_MAX]; size_t size = 32; cout << "Validating Sort" << endl; // just a potshot, but check the sort algorithm if(Validate(ary, 500)) { cout << "Validate successful " << endl; cout << endl; } cout << fixed << setprecision(0); cout << "Array Size Time in Msec sqrt(time)" << endl; while (size <= ARRAY_MAX) { SortTest(ary, size); size*= 2; } return 0; } void Swap(int & a, int & b) { int tmp; tmp = a; a = b; b = tmp; return; } bool InOrder(int ary[], size_t size) { size_t pos; bool rv = true; for(pos = 0; pos < size-1; pos++) { if (ary[pos] > ary[pos+1]) { rv = false; } } return rv; } bool Validate(int ary[], size_t size) { for(int i = 0; i < 1000; i++) { FillArray(ary, size); Sort(ary, size); if(not InOrder(ary, size)) { cout << "Sort failed " << endl; return false; } } return true; } void Sort(int ary[], size_t size){ size_t i, j, smallPos; for(i =0; i < size-1; i++) { smallPos = i; for(j = i+1; j < size; j++) { if (ary[smallPos] > ary[j]) { smallPos = j; } } if (smallPos != i) { Swap(ary[i], ary[smallPos]); } } return; } void FillArray(int ary[], size_t size){ size_t pos; for(pos =0; pos < size; pos++) { ary[pos] = rand(); } return; } void SortTest(int ary[], size_t size) { size_t i; auto start = std::chrono::high_resolution_clock::now(); for(i =0; i< SORT_TRIALS; i++) { FillArray(ary,size); Sort(ary,size); } auto elapsed = std::chrono::high_resolution_clock::now() - start; long long milliseconds = chrono::duration_cast(elapsed).count(); cout << setw(10) << size << setw(15) << milliseconds << setw(15) << sqrt(static_cast(milliseconds)) << endl; return; }