insertion-sort.c
contents ::
  insertion-int.c
  insertion-sort.c
  strings.c
  structs.c

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define ARRAY_MAX 10000
#define STR_LEN 18

/*void ascii_char_set(){
  int i;
  for(i=33; i<127; i++){
  printf("%5d:%5c\n",i,i);
  }
  }*/
void print_array(FILE *f, char **a, int n){
  if(n>0){
    fprintf(f,"%s\n", a[0]);
    print_array(f,a+1, n-1);
  }
}

void insertion_sort(char **a, int n){
  char *guide = NULL;
  int i;
  char *value = NULL;
  int j;
  int z;
  value = malloc(STR_LEN * sizeof value[0]);
  guide = malloc(STR_LEN * sizeof value[0]);

  for (i=0; i<STR_LEN-2; i++){
    guide[i]='!';
  }
  guide[i]='\0';

  for (i=0; i<n; i++){
    value = a[i];
    /* strcmp(cs,ct) returns 0  if cs==ct
       strcmp(cs,ct) returns <0 if cs<ct
       strcmp(cs,ct) returns >0 if cs>ct
    */
    if(strcmp(a[i],guide) < 0){
      for(j=i-1; j >=0 && (strcmp(a[j],value) > 0); j--){
         a[j+1] = a[j];
      }
      a[j+1] = value;
    }
    if(strcmp(value,guide) > 0) guide = value;
  }
}


void *str_malloc(size_t s){
  void *result = malloc(s);
  if(NULL == result){
    fprintf(stderr, "Memory allocation failed");
    exit(EXIT_FAILURE);
  }
  return result;
}



int main(void){
  char word[STR_LEN];
  char *wordlist[ARRAY_MAX];
  int counter = 0;
  double average = 0.0;
  int i=0;
  clock_t c,d;
  int w_length=0;
  FILE *file_out;
  
  file_out = fopen("output", "w");

  //ascii_char_set();

  while(counter<ARRAY_MAX && scanf("%s", word)!=EOF){
    w_length=strlen(word)+1;
    // if(w_length<STR_LEN){
      wordlist[counter] = str_malloc((w_length) * sizeof wordlist[0][0]);
      strcpy(wordlist[counter], word);
      counter++;
      // }
  }

  for(i=0;i<counter; i++) average += strlen(wordlist[i]);

  average = average / counter;
  printf("Average word length: %.2f\n", average);

  c=clock();
  insertion_sort(wordlist, counter);
  d=clock();

  print_array(file_out, wordlist ,counter);

  // for(i=0;i<counter; i++) fprintf(file_out,"%s\n", wordlist[i]);
  fprintf(stderr,"%d\t%f\n",counter,(d-c)/(double)CLOCKS_PER_SEC);
  for(i=0;i<20; i++) printf("%s\n", wordlist[i]);

  return EXIT_SUCCESS;
}

James Little