merge.c |
#include <stdio.h> #include <stdlib.h> #include <sys/types.h> #include <time.h> extern void amerge(int *, int , int ); extern void merge_sort(int *, int , int ); extern void quicksort(int *, int , int ); extern void aquicksort(int *, int , int ); extern void atquicksort(int *, int, int); int rand(void); void *str_malloc(size_t s){ void *result = malloc(s); if(NULL == result){ fprintf(stderr, "Memory allocation failed\n"); exit(EXIT_FAILURE); } return result; } main(){ clock_t t1, t2; //int length = 20; // int length = 1048284; int *a; int i, length=0; printf("Please input the array size:\n>"); scanf("%d", &length); a = str_malloc(length * sizeof i); if(length<1048285){ // merge sort assembler version for(i=0; i<length; i++){ a[i]=rand(); } t1= clock(); amerge(a,0,length-1); t2= clock(); printf("\nMerge Time Assembler: %ld mseconds\t\tLength: %d\n", (long)(t2-t1)/1000,length); //for(i=0; i<length; i++){ //printf("%d\n",a[i]); //} // merge sort c version for(i=0; i<length; i++){ a[i]=rand(); } t1= clock(); merge_sort(a,0,length-1); t2= clock(); printf("\nMerge Time C: %ld mseconds\t\t\tLength: %d\n", (long)(t2-t1)/1000,length); //for(i=0; i<length; i++){ //printf("%d\n",a[i]); // } } // Tail Recursive Quick Sort [Assembler] for(i=0; i<length; i++){ a[i]=rand(); } t1= clock(); atquicksort(a,0,length-1); t2= clock(); printf("\nAssembler Tail Quick Time: %ld mseconds\t\tLength: %d\n", (long)(t2-t1)/1000,length); // for(i=0; i<length; i++){ //printf("%d\n",a[i]); //} // Quick Sort [Assembler] for(i=0; i<length; i++){ a[i]=rand(); } t1= clock(); aquicksort(a,0,length-1); t2= clock(); printf("\nAssembler Quick Time: %ld mseconds\t\tLength: %d\n", (long)(t2-t1)/1000,length); // for(i=0; i<length; i++){ //printf("%d\n",a[i]); //} //Quick Sort [C] for(i=0; i<length; i++){ a[i]=rand(); } t1= clock(); quicksort(a,0,length-1); t2= clock(); printf("\nC Quick Time: %ld mseconds\t\t\tLength: %d\n", (long)(t2-t1)/1000,length); return 0; } int rand(){ static int rand_seed=10; rand_seed = rand_seed *1103515245+12345; return (unsigned int)(rand_seed / 65536) % 100; } |
James Little |