// File: qsort1.C // // Using the qsort() library function // Use the g++ compiler, not SGI CC #include #include #include //===================================================================== // Type of data we are sorting typedef int data ; //===================================================================== // Function prototypes static int compare(const data *, const data *) ; static void PrintArray(data[] , int) ; static int CheckArray(data[], int) ; // Local Functions static int compare(const data *ptr1, const data *ptr2) { if (*ptr1 < *ptr2) return -1 ; if (*ptr1 > *ptr2) return 1 ; return 0 ; } static void PrintArray(data A[], int n) { int i ; for (i = 0 ; i < n ; i++) { cout.width(14) ; // Output at least 14 chars wide cout << A[i] << " " ; // does not depend on data if (i % 5 == 4) cout << "\n" ; } if (n % 5 != 0) cout << "\n" ; // Print one more CR ? } static int CheckArray(data A[], int n) { int i ; for (i = 0 ; i < n-1 ; i++) { if (A[i] > A[i+1]) return 0 ; } return 1 ; } //===================================================================== main(int argc, char *argv[]) { data *A ; int i, n = 0, r1, r2 ; long seed ; // read command line arguments if (argc != 3) { cerr << "Usage: qsort num seed\n" ; exit(1) ; } r1 = sscanf(argv[1], "%d", &n) ; r2 = sscanf(argv[2], "%ld", &seed) ; // %ld for long int if (r1 < 1 || r2 < 1 || n <= 0) { cerr << "Bad arguments!\n" ; exit(1) ; } // generate data srand48(seed) ; A = new data[n] ; if (A == NULL) { cerr << "Out of memory!\n" ; exit(1) ; } for (i = 0 ; i < n ; i++) { A[i] = (data) lrand48() ; // depends on data type } cout << "\n" << "Original Array:" << "\n" ; PrintArray(A, n) ; qsort(A, n, sizeof(data), compare) ; cout << "\nSorted Array:\n" ; PrintArray(A, n) ; if ( CheckArray(A, n) ) { cout << "\nArray is properly sorted\n" ; } else { cout << "\nArray is *NOT* sorted\n" ; } }