/*------------------------------------------------------------------*/ /* sort6.c (Sort Using the DynArray ADT) */ /*------------------------------------------------------------------*/ #include #include #include #include "dynarray.h" /*------------------------------------------------------------------*/ int compareDouble(const void *pvItem1, const void *pvItem2) /* Return -1, 0, or 1 depending upon whether *pvItem1 is less than, equal to, or greater than *pvItem2, respectively. */ { double *pdItem1 = (double*)pvItem1; double *pdItem2 = (double*)pvItem2; if (*pdItem1 < *pdItem2) return -1; if (*pdItem1 > *pdItem2) return 1; return 0; } /*------------------------------------------------------------------*/ void printDouble(void *pvItem, void *pvExtra) /* Print *pvItem to stdout. */ { printf("%g\n", *(double*)pvItem); } /*------------------------------------------------------------------*/ void freeDouble(void *pvItem, void *pvExtra) /* Free the double referenced by pvItem. */ { free(pvItem); } /*------------------------------------------------------------------*/ int main(int argc, char *argv[]) /* Read numbers from stdin, and write them in ascending order to stdout. */ { DynArray_T oDynArray; double dNumber; double *pdNumber; /* Read the numbers into a DynArray. */ oDynArray = DynArray_new(0); while (scanf("%lf", &dNumber) != EOF) { pdNumber = (double*)malloc(sizeof(*pdNumber)); assert(pdNumber != NULL); *pdNumber = dNumber; DynArray_add(oDynArray, pdNumber); } /* Sort the DynArray. */ DynArray_sort(oDynArray, compareDouble); /* Print the DynArray. */ DynArray_map(oDynArray, printDouble, NULL); /* Free all dynamically allocated memory. */ DynArray_map(oDynArray, freeDouble, NULL); DynArray_free(oDynArray); return 0; }