// File: randomsort.cpp // Test the quicksort routine #include #include #include "sorts.H" using namespace std ; template void RandomSort(T A[], int low, int high) { int q ; if (low >= high) return ; q = partition(A, low, high) ; assert(q < high) ; // Sort 1st part switch(lrand48() % 5) { case 0 : cerr << "InsertionSort(A," << low << "," << q << ")\n" ; InsertionSort(A, low, q) ; break ; case 1 : cerr << "SelectionSort(A," << low << "," << q << ")\n" ; SelectionSort(A, low, q) ; break ; case 2 : cerr << "QuickSort(A," << low << "," << q << ")\n" ; QuickSort(A, low, q) ; break ; case 3 : cerr << "MergeSort(A," << low << "," << q << ")\n" ; MergeSort(A, low, q) ; break ; case 4 : cerr << "RandomSort(A," << low << "," << q << ")\n" ; RandomSort(A, low, q) ; break ; default : cerr << "RandomSort(A," << low << "," << q << ")\n" ; RandomSort(A, low, q) ; break ; } // Sort 2nd part switch(lrand48() % 5) { case 0 : cerr << "InsertionSort(A," << q+1 << "," << high << ")\n" ; InsertionSort(A, q+1, high) ; break ; case 1 : cerr << "SelectionSort(A," << q+1 << "," << high << ")\n" ; SelectionSort(A, q+1, high) ; break ; case 2 : cerr << "QuickSort(A," << q+1 << "," << high << ")\n" ; QuickSort(A, q+1, high) ; break ; case 3 : cerr << "MergeSort(A," << q+1 << "," << high << ")\n" ; MergeSort(A, q+1, high) ; break ; case 4 : cerr << "RandomSort(A," << q+1 << "," << high << ")\n" ; RandomSort(A, q+1, high) ; break ; default : cerr << "RandomSort(A," << q+1 << "," << high << ")\n" ; RandomSort(A, q+1, high) ; break ; } } main(int argc, char *argv[]) { int size=0, seed=0 ; if (argc != 3) { cerr << "Usage: itest size seed" << endl ; exit(1) ; } size = atoi(argv[1]) ; seed = atoi(argv[2]) ; if (size <= 0 || seed <= 0) { cerr << "Bad size or seed" << endl ; exit(1) ; } // initialize array with random data // srand48(seed) ; double *A = new double[size] ; for (int i = 0 ; i < size ; i++) { A[i] = drand48() ; } RandomSort(A, 0, size-1) ; #ifndef NDEBUG for (int i = 0 ; i < size - 1 ; i++) { if (A[i] > A[i+1]) { cerr << "Error! array not sorted correctly" << endl ; } } // for (int i = 0 ; i < size - 1 ; i++) { // cout << A[i] << endl ; // } #endif }