Friday, January 13, 2012

Sorting Algorithm :: merge sort

#include <stdio.h>
#include <math.h>
#include <stdlib.h>


#define sz 100
#define INF ((2^31)-1)


long num,data[sz];


void merge(long p,long q,long r)
{
long left[sz],right[sz],i,j,k;
long n1 = q-p+1 , n2 = r-q;


for(i=1;i<=n1;i++) left[i]=data[p+i-1];
for(i=1;i<=n2;i++) right[i]=data[q+i];


left[n1+1]=INF;
right[n2+1]=INF;
i=j=1;


for(k=p;k<=r;k++)
{
if(left[i]<=right[j])
{
data[k]=left[i];
i++;
}
else
{
data[k]=right[j];
j++;
}
}
}


void merge_sort(long p,long r)
{
long q;


if(p<r)
{
q=(p+r) /2;
merge_sort(p,q);
merge_sort(q+1,r);
merge(p,q,r);
}
}


int main()
{
int i;
printf("Give the number of elements : ");
while(scanf("%ld",&num)==1)
{
for(i=1; i<=num; i++)
scanf("%ld",&data[i]);


merge_sort(1,num);


printf("\n\nSorted data are given in due order : \n");
for(i=1; i<=num ;i++)
printf("%ld\t",data[i]);
}
return 0;
}

No comments:

Post a Comment