#include<stdio.h>
int merge(int *,int,int,int);
int merge_sort(int *,int,int);
int main()
{
int a[1000],n,i,p,r;
clrscr();
printf("Enter the length of array:");
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
merge_sort(a,0,n-1);
for(i=0;i<n;i++)
printf(" %d ",a[i]);
getch();
return 0;
}
int merge_sort(int *a,int p,int r)
{
int q;
if(p<r)
{
q=(p+r)/2;
merge_sort(a,p,q);
merge_sort(a,q+1,r);
merge(a,p,q,r);
}
return 0;
}
int merge(int *a,int p,int q,int r)
{
int n1,n2,i,j,k,L[500],R[500];
n1=q-p+1;
n2=r-q;
for(i=0;i<n1;i++)
L[i]=a[p+i];
for(j=0;j<n2;j++)
R[j]=a[q+j+1];
L[n1]=32765;
R[n2]=32765;
i=0;j=0;
for(k=p;k<=r;k++)
{
if(L[i]<=R[j])
{
a[k]=L[i];
i=i+1;
}
else
{
a[k]=R[j];
j=j+1;
}
}
return 0;
}
#include
ReplyDeleteint merge(int *,int,int,int);
int merge_sort(int *,int,int);
int main()
{
int v[100000],n,i,ip,ir;
printf("Tamano del arreglo: \n");
scanf("%d",&n);
printf("Introduzca %d numeros: \n", n);
for(i=0;i<n;i++)
scanf("%d",&v[i]);
merge_sort(v,0,n-1);
printf("Numeros ordenados: \n");
for(i=0;i<n;i++)
printf("%d \n",v[i]);
getch();
return 0;
}
int merge_sort(int *v,int ip,int ir)
{
int iq;
if(ip<ir)
{
iq=(ip+ir)/2;
merge_sort(v,ip,iq);
merge_sort(v,iq+1,ir);
merge(v,ip,iq,ir);
}
return 0;
}
int merge(int *v,int ip,int iq,int ir)
{
int n1,n2,i,j,k,L[500],R[500];
n1=iq-ip+1;
n2=ir-iq;
for(i=0;i<n1;i++)
L[i]=v[ip+i];
for(j=0;j<n2;j++)
R[j]=v[iq+j+1];
L[n1]=32765;
R[n2]=32765;
i=0;j=0;
for(k=ip;k<=ir;k++)
{
if(L[i]<=R[j])
{
v[k]=L[i];
i=i+1;
}
else
{
v[k]=R[j];
j=j+1;
}
}
return 0;
}