realloc_1.c |
| #include <stdio.h> #include <stdlib.h> int insert=23; static void array_print(int *a, int n){ int i; for(i=0; i<n; i++){ printf("%d\n", a[i]); } } void merge_sort(int *newa, int *a, int n){ /* merge(a, p, q, r); */ if(n<=insert){ /* Insertion sort procedure */ int guide=0; int i; int value; int j; for (i=0; i<=n; i++){ value = a[i]; if(a[i]<guide){ for(j=i-1; j >=0 && a[j] > value; j--){ a[j+1]=a[j]; } a[j+1]=value; } if (value>guide) guide=value; /* End Insertion Sort procedure */ } }else{ /* divide */ int q=n/2; int i; int s = 0; int j = q+1; merge_sort(newa,a,q); merge_sort(newa,a+q+1,n-q-1); /* and conquer */ for(i=0;s<q+1;i++){ if( j>n || a[s] <= a[j]) { newa[i]=a[s++]; }else if(a[s] >a[j]) { newa[i]=a[j++]; } } while(j<=n){ newa[i++]=a[j++]; } for(i=0,s=0;i<=n;i++,s++){ a[s]=newa[i]; } /* End of Merge sort Procedure */ } } int main(){ int size = 2; int length = 0; int item; int *buffer_array; int *my_array = malloc(size * sizeof my_array[0]); if(NULL == my_array){ fprintf(stderr, "memory allocation failed.\n"); exit(EXIT_FAILURE); } while(1 == scanf("%d", &item)){ if(length == size){ size += size; my_array = realloc(my_array, size * sizeof my_array[0]); if(NULL == my_array){ fprintf(stderr, "memory allocation failed.\n"); exit(EXIT_FAILURE); } } my_array[length++] = item; } buffer_array = malloc(length * sizeof my_array[0]); if(NULL == buffer_array){ fprintf(stderr, "memory allocation failed for buffer array.\n"); exit(EXIT_FAILURE); } merge_sort(buffer_array, my_array, length-1); array_print(my_array, length); free(my_array); return EXIT_SUCCESS; } |
James Little |