#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