3 /* Michel Vallieres, 2009 */
14 void printlist(FILE * stream, int list_size, double *list, int num_shown)
18 if (num_shown > list_size / 2)
19 num_shown = list_size / 2;
20 for (i = 0; i < num_shown; i++)
21 fprintf(stream, "%g\t", list[i]);
22 fprintf(stream, "...\n...\t");
23 for (i = num_shown; i > 0; i--)
24 fprintf(stream, "%g\t", list[list_size - i]);
25 fprintf(stream, "\n");
27 for (i = 0; i < list_size; i++)
28 fprintf(stream, "%g\n", list[i]);
32 double checklist(int list_size, double *list)
38 for (i = 0; i < list_size; i++)
43 int read_data(const char *file_name, int *pList_size, double **pList)
50 if (strcmp("-", file_name) == 0) {
52 } else if ((fp = fopen(file_name, "r")) == NULL) {
53 fprintf(stderr, "error in opening data file %s\n", file_name);
56 // read the size of the data file
57 fscanf(fp, "# %d", pList_size);
59 // allocate memory for the data
60 *pList = (double *)malloc(sizeof(double) * *pList_size);
62 fprintf(stderr, "could not allocate %d bytes\n",
63 sizeof(double) * *pList_size);
68 fprintf(stderr, "reading %d points\n", *pList_size);
70 for (i = 0; i < *pList_size; i++) {
71 fscanf(fp, "%lf", &x);
81 int main(int argc, char *argv[])
85 char *file_name = "-";
95 if (read_data(file_name, &list_size, &list) != EXIT_SUCCESS)
99 /* print initial list */
100 fprintf(stderr, "The list before sorting is:\n");
101 printlist(stderr, list_size, list, NUM_SHOWN);
102 fprintf(stderr, "Check: sum of %d elements = %g\n",
103 list_size, checklist(list_size, list));
107 sort(list_size, list);
110 /* print final list */
111 fprintf(stderr, "The list after sorting is:\n");
112 printlist(stderr, list_size, list, NUM_SHOWN);
113 fprintf(stderr, "Check: sum of %d elements = %g\n",
114 list_size, checklist(list_size, list));
115 for (i = 0; i < list_size - 1; i++) {
116 if (list[i] > list[i + 1]) {
118 "Error: sorted list[%d] = %g > %g = list[%d]\n",
119 i, list[i], list[i + 1], i + 1);
125 printlist(stdout, list_size, list, 0);