// File: main3.C
//
// Generic QuickSort via templates.

#include <iostream.h>
#include <iomanip.h>
#include <stdlib.h>
#include <time.h>
#include "bstring3.h"

#include "qstemplate.h"

main() {
   int *A, i, n=50 ;

   srand48(time(NULL)) ;
   A = new int[n] ;
   if (A == NULL) abort() ;

   cout << "\nOriginal Array: " << endl ;
   for (i = 0 ; i < n ; i++) {
      A[i] = lrand48() ;
      cout << setw(12) << A[i] << "  " ;
      if (i % 5 == 4) cout << endl ;
   }

   QuickSort(A,n) ;

   cout << "\nSorted Array: " << endl ;
   for (i = 0 ; i < n ; i++) {
      cout << setw(12) << A[i] << "  " ;
      if (i % 5 == 4) cout << endl ;
   }


   // Do it again with a floating point array

   float *B = new float[n] ;
   if (B == NULL) abort() ;

   cout << "\nOriginal Array: " << endl ;
   for (i = 0 ; i < n ; i++) {
      B[i] = drand48() ;
      cout << setw(12) << B[i] << "  " ;
      if (i % 5 == 4) cout << endl ;
   }

   QuickSort(B,n) ;

   cout << "\nSorted Array: " << endl ;
   for (i = 0 ; i < n ; i++) {
      cout << setw(12) << B[i] << "  " ;
      if (i % 5 == 4) cout << endl ;
   }

   // Do it again with an array of strings

   BString C[] = { BString("Space,"), BString("the"), BString("final"),
      BString("frontier."), BString("These"), BString("are"),
      BString("the"), BString("voyages"), BString("of"),
      BString("the"), BString("Starship"), BString("Enterprise") } ;
   n = 12 ;

   cout << "\nOriginal Array: " << endl ;
   for (i = 0 ; i < n ; i++) {
      cout << setw(12) << C[i] << "  " ;
      if (i % 5 == 4) cout << endl ;
   }
   cout << endl ;

   QuickSort(C,n) ;

   cout << "\nSorted Array: " << endl ;
   for (i = 0 ; i < n ; i++) {
      cout << setw(12) << C[i] << "  " ;
      if (i % 5 == 4) cout << endl ;
   }
   cout << endl ;
}
