I have created a merge sort program... which will take all the numbers to sort from the command line.. The code is below.. please check it and comment.. how can the code be optimized, made better etc etc..
thanks in advanceCode:# include <stdio.h> # include <stdlib.h> int main(int argc,char *argv[]) { int *array,i; if(argc<3) { printf("\nInsufficient arguments provided\n"); return(1); } if((array=(int*)calloc(argc-1,sizeof(int)))==NULL) { printf("Error allocating memory"); exit(1); } for(i=1;i<argc;i++) { if(isalpha(*argv[i])) { printf("\nInvalid argument encountered\n"); free(array); exit(1); } else array[i-1]=atoi(argv[i]); } msort(array,0,argc-2); for(i=0;i<argc-1;i++) printf("\n%d",array[i]); free(array); return 0; } msort(int *array,int lower,int upper) { int temp,*arr,i,down,up,tempup; if(upper-lower==1) { if(array[lower]>array[upper]) { temp=array[upper]; array[upper]=array[lower]; array[lower]=temp; } } else if(upper-lower>1) { msort(array,lower,(lower+upper)/2); msort(array,((lower+upper)/2)+1,upper); } if((arr=(int*)calloc(upper-lower+1,sizeof(int)))==NULL) { printf("Error allocating memory"); return(1); } if((upper-lower+1)>2) { for(i=0;i<(upper-lower)+1;i++) arr[i]=array[lower+i]; down=0; if((upper-lower+1)%2!=0) up=((upper-lower+1)/2)+1; else up=((upper-lower+1)/2); tempup=up; for(i=0;i<upper-lower+1;i++) { if(down==tempup) { array[lower+i]=arr[up]; up++; continue; } if(up>=(upper-lower+1)) { array[lower+i]=arr[down]; down++; continue; } if(arr[up]>arr[down]) { array[lower+i]=arr[down]; down++; continue; } if(arr[up]<arr[down]) { array[lower+i]=arr[up]; up++; continue; } if(arr[up]==arr[down]) { array[lower+i]=arr[up]; up++; continue; } } free(arr); } }
bye
Vasanth



LinkBack URL
About LinkBacks


