From 5b3aa21110191680627f0226ba313bc75f1a7937 Mon Sep 17 00:00:00 2001 From: Kyle K Date: Tue, 16 Nov 2010 11:07:46 -0600 Subject: print to file, simplified mergesort --- sorts.c | 85 +++++++++++++++++++++++++++++++++++++++++++---------------------- 1 file changed, 57 insertions(+), 28 deletions(-) diff --git a/sorts.c b/sorts.c index 5dd49a2..f4bb9b3 100644 --- a/sorts.c +++ b/sorts.c @@ -11,7 +11,14 @@ #include #include #include -#define ARR_SIZE 10 +#define ARR_SIZE 20 +#define ARR_RANGE 10 +#define ELEM_LINE 10 +#define FNAME "sort.txt" +#undef PRINT_FILE + +/* global */ +FILE *out = NULL; /* function prototypes */ void insrt_sort(int *, int); @@ -39,7 +46,7 @@ void mergesort(int a[], int low, int high) /* http://en.allexperts.com/q/C-1587/Merge-Sort-C.htm */ void merge(int a[], int low, int high, int mid) { - int i, j, k, c[50]; + int i, j, k, c[ARR_SIZE]; i = low; j = mid + 1; k = low; @@ -47,32 +54,16 @@ void merge(int a[], int low, int high, int mid) while ( (i <= mid) && (j <= high) ) { if (a[i] < a[j]) - { - c[k] = a[i]; - k++; - i++; - } + c[k++] = a[i++]; else - { - c[k] = a[j]; - k++; - j++; - } + c[k++] = a[j++]; } while (i <= mid) - { - c[k] = a[i]; - k++; - i++; - } + c[k++] = a[i++]; while (j <= high) - { - c[k] = a[j]; - k++; - j++; - } + c[k++] = a[j++]; for (i = low; i < k; i++) a[i] = c[i]; @@ -133,14 +124,27 @@ void prnt_arr(int *arr, int elem) if (arr == NULL) fputs("nothing to print", stderr); +#ifdef PRINT_FILE + assert(out != NULL); + int i; - for (i = 0; i < elem; i++) + for (i = 1; i < elem + 1; i++) { - printf("%d ", *(arr + i) ); - if ( (i % 10 == 0) && i != 0) + fprintf(out, "%3d ", *(arr + i - 1) ); + if ( (i % ELEM_LINE == 0) && i != 0) + fprintf(out, "\n"); + } + fprintf(out, "\n"); +#else + int i; + for (i = 1; i < elem + 1; i++) + { + printf("%3d ", *(arr + i - 1) ); + if ( (i % ELEM_LINE == 0) && i != 0) printf("\n"); } printf("\n"); +#endif } int *mk_rand_arr(int elem, int range) @@ -165,16 +169,41 @@ int *mk_rand_arr(int elem, int range) int main(int argc, char **argv) { - srand( (unsigned int )time(NULL) ); + srand( (unsigned int ) time(NULL) ); + int *arr = mk_rand_arr(ARR_SIZE, ARR_RANGE); - int *arr = mk_rand_arr(ARR_SIZE, 10); +#ifdef PRINT_FILE + out = fopen(FNAME, "w"); + if (out == NULL) + { + perror("fopen"); + exit(-1); + } +#endif + +#ifdef PRINT_FILE + fprintf(out, "unsorted:\n"); +#else + printf("unsorted:\n"); +#endif prnt_arr(arr, ARR_SIZE); //bubble_sort(arr, ARR_SIZE); //select_sort(arr, ARR_SIZE); - insrt_sort(arr, ARR_SIZE); + //insrt_sort(arr, ARR_SIZE); + mergesort(arr, 0, ARR_SIZE - 1); + +#ifdef PRINT_FILE + fprintf(out, "sorted:\n"); +#else + printf("sorted:\n"); +#endif prnt_arr(arr, ARR_SIZE); +#ifdef PRINT_FILE + fclose(out); +#endif + return 0; } -- cgit v1.2.3