realloc_1.c
contents ::
  list_adt.c
  list.c
  list.h
  mylib.c
  mylib.h
  quick.c
  realloc_1.c
  realloc_2.c
  test.c
  Makefile

#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