Thursday, August 27, 2009

Merge Sort



# include<stdio.h>



# include<conio.h>




int

z[50];




void

msort();




void

mpass();




void

merge();




void

msort(int x[],int
n)



{



int l,i,y[50];



l=1;



printf("\n");



for(i=1;i<=n;i++)



printf("\t%d",x[i]);



while(l<n)



{



mpass(x,y,n,l);



l=2*l;



mpass(y,x,n,l);



l=2*l;



}



}




void

mpass(int x[],int
y[],int n,int
l)



{



int i,t,b;



i=1;



while(i<=n-2*l+1)



{



merge(x,y,i,i+l-1,i+2*l-1);



i=i+2*l;



}



if(i+l-1<n)



{



merge(x,y,i,i+l-1,n);



}



else



{



for(t=i;t<=n;t++)



y[t]=x[t];



}



printf("\n");



for(b=1;b<=n;b++)



printf("\t%d",y[b]);



}




void

merge(int x[],int
z[],int l,int
m,int n)



{



int i,j,k,t;



i=l;



k=l;



j=m+1;



while(i<=m&&j<=n)



{



if(x[i]<=x[j])



{



z[k]=x[i];



i=i+1;



}



else



{



z[k]=x[j];



j=j+1;



}



k=k+1;



}



if(i>m)








for(t=j;t<=n;t++)



{



z[k]=x[t];



k++;



}



else



{



for(t=i;t<=m;t++)




{



z[k]=x[t];



k++;



}



}



}




void

main()



{



int n,i,x[50];



clrscr();



printf("\n\t\t\tMERGE
SORT\n\t\t\t~~~~~ ~~~~"
);



printf("\nENTER
THE NO OF ELEMENTS TO BE SORTED: "
);



scanf("%d",&n);



printf("ENTER ELEMENTS
:"
);



for(i=1;i<=n;i++)



{



printf("\n\tx[%d] :",i);



scanf("%d",&x[i]);



}



printf("\nThe merging
iterations are \n "
);



msort(x,n);



printf("\n\n\nTHE
SORTED LIST IS: "
);



for(i=1;i<=n;i++)



printf("\n\tz[%d] :%d",i,x[i]);



getch();



}





No comments:

Post a Comment