Saturday, 8 December 2012

Merge Sort using Recursion in C


#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;
}

1 comment:

  1. #include
    int 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;
    }

    ReplyDelete