Saturday, 10 May 2014

Merge Sort

PROGRAM:

#include<stdio.h>
#include<conio.h>
int a[20],temp[20];
void mergesort(int a[],int temp[],int n);
void msort(int a[],int temp[],int left,int right);
void merge(int a[],int temp[],int left,int center,int right);
void main()
{
                int i,n;
                clrscr();
                printf("$$$ MERGE SORT $$$");
                printf("\nEnter the array limit:");
                scanf("%d",&n);
                printf("Enter array elements:");
                for(i=0;i<n;i++)
                {
                                scanf("%d",&a[i]);
                }
                mergesort(a,temp,n);
                printf("The Sorted elements are:\t");
                for(i=0;i<n;i++)
                {
                                printf("%d\t",a[i]);
                }
                getch();
}

void mergesort(int a[],int temp[],int n)
{
                msort(a,temp,0,n-1);
}

void msort(int a[],int temp[],int left,int right)
{
                int center;
                if(left<right)
                {
                                center=(left+right)/2;
                                msort(a,temp,left,center);
                                msort(a,temp,center+1,right);
                                merge(a,temp,left,center+1,right);
                }
}

void merge(int a[],int temp[],int left,int center,int right)
{
                int i,left_end,num_elements,tmp_pos;
                left_end=center-1;
                tmp_pos=left;
                num_elements=right-left+1;
                while((left<=left_end)&&(center<=right))
                {
                                if(a[left]<=a[center])
                                {
                                                temp[tmp_pos]=a[left];
                                                tmp_pos++;
                                                left++;
                                }
                                else
                                {
                                                temp[tmp_pos]=a[center];
                                                tmp_pos++;
                                                center++;
                                }
                }
                while(left<=left_end)
                {
                      temp[tmp_pos]=a[left];
                      left++;
                      tmp_pos++;
                }
                while(center<=right)
                {
                                temp[tmp_pos]=a[center];
                                center++;
                                tmp_pos++;
                }
                for(i=0;i<=num_elements;i++)
                {
                                a[right]=temp[right];
                                right--;
                }
}

OUTPUT:

$$$ MERGE SORT $$$

Enter the array limit:       8
Enter array elements:    40           20           70           14           60           61           97           30
The Sorted elements are:            14           20           30           40           60           61           70           97

No comments:

Post a Comment