3 /* Michel Vallieres, 2009 */
16 void printlist(FILE * stream, int list_size, double *list, int num_shown)
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 ((fp = fopen(file_name, "r")) == NULL) {
51 fprintf(stderr, "error in opening data file %s\n", file_name);
54 // read the size of the data file
55 fscanf(fp, "# %d", pList_size);
57 // allocate memory for the data
58 *pList = (double *)malloc(sizeof(double) * *pList_size);
60 fprintf(stderr, "could not allocate %d bytes\n",
61 sizeof(double) * *pList_size);
66 fprintf(stderr, "reading %d points\n", *pList_size);
68 for (i = 0; i < *pList_size; i++) {
69 fscanf(fp, "%lf", &x);
78 int main(int argc, char *argv[])
82 char *file_name = "data";
89 if (read_data(file_name, &list_size, &list) != EXIT_SUCCESS)
93 /* print initial list */
94 fprintf(stderr, "The list before sorting is:\n");
95 printlist(stderr, list_size, list, NUM_SHOWN);
96 fprintf(stderr, "Check: sum of %d elements = %g\n",
97 list_size, checklist(list_size, list));
101 sort(list_size, list);
104 /* print final list */
105 fprintf(stderr, "The list after sorting is:\n");
106 printlist(stderr, list_size, list, NUM_SHOWN);
107 fprintf(stderr, "Check: sum of %d elements = %g\n",
108 list_size, checklist(list_size, list));
111 printlist(stdout, list_size, list, 0);