| insertion-sort.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 |