diff options
Diffstat (limited to 'sorts.c')
-rw-r--r-- | sorts.c | 85 |
1 files changed, 57 insertions, 28 deletions
@@ -11,7 +11,14 @@ #include <string.h> #include <time.h> #include <assert.h> -#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; } |