C Program to implement Merge sort..

#include<stdio.h>


void merge(int a[],int l,int m,int r);

void mergesort(int a[],int l,int r)
{
 if(l<r)
  {
  int m=(l+r)/2;
  mergesort(a,l,m);
  mergesort(a,m+1,r);
  merge(a,l,m,r);
 }
 else
 return;
}

void merge(int a[],int l,int m,int r)
{
 int i,j,k;
 int n1=m-l+1;
 int n2=r-m;
int left[n1],right[n2];
 for(i=0;i<n1;i++)
 {
 left[i]=a[l+i];
 }
 for(j=0;j<n2;j++)
 {
 right[j]=a[j+m+1];
 }
 i=0;
 j=0;
 k=l;

 while(i<n1 && j<n2)
  {
  if(left[i]<=right[j])
  {
  a[k]=left[i];
  i++;
  }
  else
  {
  a[k]=right[j];
  j++;
  }
  k++;
  }

while(i<n1)
{
 a[k]=left[i];
 i++;
 k++;
}

while(j<n2)
{
 a[k]=right[j];
 j++;
 k++;
}
}
void main()
{
 int a[100],n,i;
 printf("Enter the no of elements of the Array..");
 scanf("%d",&n);
 printf("\nEnter the elements one by one..");
 for(i=0;i<n;i++)
   scanf("%d",&a[i]);
 mergesort(a,0,n-1);
 printf("\nThe sorted array is ...");
 for(i=0;i<n;i++)
 printf("%d ",a[i]);
}

No comments:

Post a comment