Sunday, 17 June 2012

Merge sort


#include<stdio.h>
#include<conio.h>
#include<alloc.h>
void main()
{
 int a[20],n,i; void mergesort(int a[],int n);
 clrscr();
 printf("\n Enter size of array:");
 scanf("%d",&n);
 printf("\n Enter the elements:");
 for(i=0;i<n;i++)
  scanf("%d",&a[i]);
  mergesort(a,n);
 printf("\n Elements After Sorting:");
 for(i=0;i<n;i++)
  printf("%d\t",a[i]);
 getch();
}
int leftend,tmppos,numelem,i;
void msort(int a[],int tmparray[],int left,int right);
void merge(int a[],int tmparray[],int lpos,int rpos,int rightend);
void mergesort(int a[],int n)
{
 int *tmparray;
 tmparray=malloc(n * sizeof(int));
 if(tmparray!=NULL)
 {
  msort(a,tmparray,0,n-1);
  free(tmparray);
 }
}
void msort(int a[20],int tmparray[],int left,int right)
{
 int center;
 if(left<right)
 {
  center=(left+right)/2;
  msort(a,tmparray,left,center);
  msort(a,tmparray,center+1,right);
  merge(a,tmparray,left,center+1,right);
 }
}
void merge(int a[20],int tmparray[],int lpos,int rpos,int rightend)
{
 leftend=rpos-1;
 tmppos=lpos;
 numelem=rightend-lpos+1;
 while(lpos<=leftend && rpos<=rightend)
 {
  if(a[lpos]<=a[rpos])
   tmparray[tmppos++]=a[lpos++];
  else
   tmparray[tmppos++]=a[rpos++];
 }
 while(lpos<=leftend)
  tmparray[tmppos++]=a[lpos++];
  while(rpos<=rightend)
   tmparray[tmppos++]=a[rpos++];
   for(i=0;i<numelem;i++,rightend--)
    a[rightend]=tmparray[rightend];
}

No comments:

Post a Comment