/*------------------------------------------------------------------*/ /* sort3.c (Dynamic Memory Management) */ /*------------------------------------------------------------------*/ #include #include #include /*------------------------------------------------------------------*/ static void insertionSort(double *pdArray, int iNumberCount) /* Sort pdArray[0..iNumberCount-1] in ascending order. */ { int i1; int i2; double dTemp; for (i1 = 1; i1 < iNumberCount; i1++) for (i2 = i1; i2 > 0; i2--) if (pdArray[i2] < pdArray[i2-1]) { dTemp = pdArray[i2]; pdArray[i2] = pdArray[i2-1]; pdArray[i2-1] = dTemp; } } /*------------------------------------------------------------------*/ int main(int argc, char *argv[]) /* Read numbers from stdin, and write them in ascending order to stdout. */ { double *pdArray; int iNumberCount; int iLength; double dNumber; int i; /* Dynamically allocate memory for the array. */ printf("How many numbers (max) will you enter? "); scanf("%d", &iLength); pdArray = (double*)calloc((size_t)iLength, sizeof(double)); assert(pdArray != NULL); /* Read the numbers into the array. */ iNumberCount = 0; while (scanf("%lf", &dNumber) != EOF) { pdArray[iNumberCount] = dNumber; iNumberCount++; if (iNumberCount == iLength) break; } /* Sort the array. */ insertionSort(pdArray, iNumberCount); /* Write the numbers from the array. */ for (i = 0; i < iNumberCount; i++) printf("%g\n", pdArray[i]); /* Free the array. */ free(pdArray); return 0; }