# 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