summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKyle K <kylek389@gmail.com>2010-11-16 11:07:46 -0600
committerKamil Kaminski <kamilkss@gmail.com>2010-11-16 11:07:46 -0600
commit5b3aa21110191680627f0226ba313bc75f1a7937 (patch)
treef4351e03fdd98293a44ea6228b8a722b8fdbce37
parent0c6b80bdc089017e04ea13c528853313b82a1405 (diff)
downloadsorts-5b3aa21110191680627f0226ba313bc75f1a7937.tar.gz
sorts-5b3aa21110191680627f0226ba313bc75f1a7937.tar.bz2
sorts-5b3aa21110191680627f0226ba313bc75f1a7937.zip
print to file, simplified mergesort
-rw-r--r--sorts.c85
1 files 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 <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;
}