Minor style cleanups to src/sorting. Also ran through `indent --linux *.[hc]`.
authorW. Trevor King <wking@drexel.edu>
Sun, 24 Oct 2010 18:03:23 +0000 (14:03 -0400)
committerW. Trevor King <wking@drexel.edu>
Sun, 24 Oct 2010 18:03:23 +0000 (14:03 -0400)
src/sorting/Makefile
src/sorting/README
src/sorting/bubble.c
src/sorting/main.c
src/sorting/quicksort.c
src/sorting/sort.h [moved from src/sorting/main.h with 64% similarity]

index ec89dfe3f3d4fc9b7aaacd920a455070d7aee381..c85a83c09e5ea00842c70f702a8cbf23c1406f8b 100644 (file)
@@ -24,7 +24,7 @@ clean:
 data : data.py
        ./$< $(DATA_SIZE) > $@
 
-$(EXECS:%=%.o) main.o : %.o : %.c main.h
+$(EXECS:%=%.o) main.o : %.o : %.c sort.h
        $(CC) -c $(CFLAGS) -o $@ $<
 
 $(EXECS) : % : main.o %.o
index 9506a9dcba9a449f548821a16dc03e94b4990bef..4f619ffc6d00394b8405bb855d03b15cfbe5d7d7 100644 (file)
@@ -35,7 +35,7 @@ Timing
 
 Timing 8191 data points on my 571 MHz netbook with
 
-    $ time ./quicksort data > /dev/null
+    $ time ./bubble data > /dev/null
     $ time ./quicksort data > /dev/null
 
 quicksort takes 0.075 s and bubble takes 3.994s.
index d747d63b1da7e4341a4c761893b224a2fd192279..8b7358cfc95eacfe90e5bb8846e6e69137982503 100644 (file)
@@ -2,27 +2,27 @@
 
 /* Michel Vallieres, 2009 */
 
-#include "main.h"
+#include "sort.h"
 
+void swap(double *x, double *y)
+{
+       double temp;
+       temp = *x;
+       *x = *y;
+       *y = temp;
+}
 
 void sort(int list_size, double *list)
 {
-  double temp;
-  int i, exchange;
+       int i, exchange = 1;
 
-  exchange = 1;
-  while( exchange != 0 )
-    {
-      exchange = 0;
-      for( i=0; i<list_size-1 ; i++ )
-       {
-         if ( list[i] > list[i+1] )
-           {
-             temp = list[i];
-             list[i] = list[i+1];
-             list[i+1] = temp;
-             exchange++;
-           }
+       while (exchange != 0) {
+               exchange = 0;
+               for (i = 0; i < list_size - 1; i++) {
+                       if (list[i] > list[i + 1]) {
+                               swap(&list[i], &list[i + 1]);
+                               exchange++;
+                       }
+               }
        }
-    }
 }
index 65d00d9dc9d5c71ba008996a1c5ae0ccbb3da1af..7eb791d25d54f49aca985ca651d0a11e28a5dbfe 100644 (file)
@@ -6,99 +6,93 @@
 #include <stdlib.h>
 #include <string.h>
 
-#include "main.h"
+#include "sort.h"
 
-
-void printlist(FILE *stream, int list_size, double *list, int num_shown)
+void printlist(FILE * stream, int list_size, double *list, int num_shown)
 {
-  int i;
-  for(i=0; i < num_shown; i++)
-    fprintf(stream, "%f\t", list[i]);
-  fprintf(stream, "\n");
-  for(i=num_shown; i > 0 ; i--)
-    fprintf(stream, "%f\t", list[list_size-i]);
-  fprintf(stream, "\n");
+       int i;
+       for (i = 0; i < num_shown; i++)
+               fprintf(stream, "%f\t", list[i]);
+       fprintf(stream, "\n");
+       for (i = num_shown; i > 0; i--)
+               fprintf(stream, "%f\t", list[list_size - i]);
+       fprintf(stream, "\n");
 }
 
 double checklist(int list_size, double *list)
 {
-  int i;
-  double sum;
+       int i;
+       double sum;
 
-  sum = 0.0;
-  for(i = 0; i < list_size; i++ )
-    sum = sum + list[i];
-  return sum;
+       sum = 0.0;
+       for (i = 0; i < list_size; i++)
+               sum = sum + list[i];
+       return sum;
 }
 
-int read_data(const char *file_name, int *pList_size, double **pList) {
-  FILE   *fp;
-  int    i;
-  double x;
-
-  // open the file
-  if ((fp = fopen(file_name, "r")) == NULL)
-    {
-      fprintf(stderr, "error in opening data file %s\n", file_name);
-      return EXIT_FAILURE;
-    }
-
-  // read the size of the data file
-  fscanf(fp, "# %d", pList_size);
-
-  // allocate memory for the data
-  *pList = (double *)malloc(sizeof(double)* *pList_size);
-  if (*pList == NULL)
-    {
-      fprintf(stderr, "could not allocate %d bytes\n",
-             sizeof(double)* *pList_size);
-      return EXIT_FAILURE;
-    }
-
-  // read in the data
-  fprintf(stderr, "reading %d points\n", *pList_size);
-  for (i=0; i < *pList_size ; i++)
-    {
-      fscanf(fp, "%lf", &x);
-      (*pList)[i] = x;
-    }
-
-  // close the file
-  fclose(fp);
-  return EXIT_SUCCESS;
+int read_data(const char *file_name, int *pList_size, double **pList)
+{
+       FILE *fp;
+       int i;
+       double x;
+
+       // open the file
+       if ((fp = fopen(file_name, "r")) == NULL) {
+               fprintf(stderr, "error in opening data file %s\n", file_name);
+               return EXIT_FAILURE;
+       }
+       // read the size of the data file
+       fscanf(fp, "# %d", pList_size);
+
+       // allocate memory for the data
+       *pList = (double *)malloc(sizeof(double) * *pList_size);
+       if (*pList == NULL) {
+               fprintf(stderr, "could not allocate %d bytes\n",
+                       sizeof(double) * *pList_size);
+               return EXIT_FAILURE;
+       }
+       // read in the data
+       fprintf(stderr, "reading %d points\n", *pList_size);
+       for (i = 0; i < *pList_size; i++) {
+               fscanf(fp, "%lf", &x);
+               (*pList)[i] = x;
+       }
+
+       // close the file
+       fclose(fp);
+       return EXIT_SUCCESS;
 }
 
-
-int main ( int argc, char *argv[] )
+int main(int argc, char *argv[])
 {
-  int    list_size, i;
-  double *list;
-  char   *file_name = "data";
-
-  // parse arguments
-  if (argc > 1)
-    file_name = argv[1];
-
-  // setup
-  if (read_data(file_name, &list_size, &list) != EXIT_SUCCESS)
-    return EXIT_FAILURE;
-
-  /* print initial list */
-  fprintf(stderr, "The list before sorting is:\n");
-  printlist(stderr, list_size, list, 3);
-  fprintf(stderr, "Check: sum of %d elements = %f\n",
-         list_size, checklist(list_size, list));
-
-  /* sort the list */
-  sort(list_size, list);
-
-  /* print final list */
-  fprintf(stderr, "The list after sorting is:\n");
-  printlist(stderr, list_size, list, 3);
-  fprintf(stderr, "Check: sum of %d elements = %f\n",
-         list_size, checklist(list_size, list));
-  for (i=0; i < list_size; i++)
-    printf("%f\n", list[i]);
-
-  return EXIT_SUCCESS;
+       int list_size, i;
+       double *list;
+       char *file_name = "data";
+
+       // parse arguments
+       if (argc > 1)
+               file_name = argv[1];
+
+       // setup
+       if (read_data(file_name, &list_size, &list) != EXIT_SUCCESS)
+               return EXIT_FAILURE;
+
+       /* print initial list */
+       fprintf(stderr, "The list before sorting is:\n");
+       printlist(stderr, list_size, list, 3);
+       fprintf(stderr, "Check: sum of %d elements = %f\n",
+               list_size, checklist(list_size, list));
+
+       /* sort the list */
+       sort(list_size, list);
+
+       /* print final list */
+       fprintf(stderr, "The list after sorting is:\n");
+       printlist(stderr, list_size, list, 3);
+       fprintf(stderr, "Check: sum of %d elements = %g\n",
+               list_size, checklist(list_size, list));
+       for (i = 0; i < list_size; i++)
+               printf("%g\n", list[i]);
+
+       return EXIT_SUCCESS;
 }
index 927c43a3be183763b586c3a9fa45eb5ce266a0c4..0d82e07d33898cab7bef71ee0cf9e5530ce7786b 100644 (file)
@@ -4,53 +4,54 @@
  *                                   
  *  ref: http://cprogramminglanguage.net/quicksort-algorithm-c-source-code.aspx
  *       Numerical Recipes
- */ 
+ */
 
 void swap(double *x, double *y)
 {
-  double temp;
-  temp = *x;
-  *x = *y;
-  *y = temp;
+       double temp;
+       temp = *x;
+       *x = *y;
+       *y = temp;
 }
 
-int choose_pivot(int i,int j )
+int choose_pivot(int i, int j)
 {
-  return((i+j) /2);
+       return ((i + j) / 2);
 }
 
-void quicksort( double list[], int m, int n )
+/* sort the list from list[m] to list[n] */
+void quicksort(double list[], int m, int n)
 {
-  int i,j,k;
-  double key;
-
-  if( m < n)
-    {
-      k = choose_pivot(m,n);
-      swap(&list[m],&list[k]);
-      key = list[m];
-      i = m+1;
-
-      j = n;
-      while(i <= j)
-       {
-         while((i <= n) && (list[i] <= key))
-           i++;
-         while((j >= m) && (list[j] > key))
-           j--;
-         if( i < j)
-           swap(&list[i],&list[j]);
+       int i, j, k;
+       double key;
+
+       if (m < n) {
+               k = choose_pivot(m, n);
+               swap(&list[m], &list[k]);
+               key = list[m];
+
+               i = m + 1;
+               j = n;
+               while (1) {
+                       while ((i <= n) && (list[i] <= key))
+                               i++;
+                       while ((j >= m) && (list[j] > key))
+                               j--;
+                       if (i >= j)
+                               break;
+                       swap(&list[i], &list[j]);
+               }
+
+               // put the pivot back in
+               swap(&list[m], &list[j]);
+
+               // recursively sort the lesser lists
+               quicksort(list, m, j - 1);
+               quicksort(list, j + 1, n);
        }
-      // swap two elements
-      swap(&list[m],&list[j]);
-
-      // recursively sort the lesser list
-      quicksort(list,m,j-1);
-      quicksort(list,j+1,n);
-    }
 }
 
 void sort(int list_size, double *list)
 {
-  quicksort(list, 0, list_size-1);
+       quicksort(list, 0, list_size - 1);
 }
similarity index 64%
rename from src/sorting/main.h
rename to src/sorting/sort.h
index 0b43b5e18d56645319289c507b445d898ccb82ae..9418b4ae57443996cae4124c12f66e37a9637bbd 100644 (file)
@@ -1,2 +1,7 @@
+#ifndef sort_h
+#define sort_h
+
 /* sort a list `list` of `list_size` elements in place. */
 void sort(int list_size, double *list);
+
+#endif                         /* sort_h */