// File: qhack.C // // A silly hack to get qsort for different types // macro DATA must be defined previously! // This file is unguarded. It can be included only once for // each DATA type. #include #include #include //===================================================================== // Function prototypes void PrintArray(DATA[] , int) ; int CheckArray(DATA[], int) ; void qsort(DATA[], int) ; int compare(const DATA *, const DATA *) ; // Local Functions int compare(const DATA *ptr1, const DATA *ptr2) { if (*ptr1 < *ptr2) return -1 ; if (*ptr1 > *ptr2) return 1 ; return 0 ; } 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 ? } 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 ; } void qsort(DATA A[], int n) { // variable compare_func stores address to the correct compare function // This is needed to distinguish between the many compare functions int (*compare_func) (const DATA *, const DATA *) ; compare_func = &compare ; qsort(A, n, sizeof(DATA), compare_func) ; }