#include <stdio.h>
#include <stdlib.h>
void msort(int a[],int low ,int high,int n)
{
if(low < high)
{
int mid = (low+high)/2;
msort(a,low,mid,n);
msort(a,mid+1,high,n);
int i=low,j=mid+1,k=low;
int temp[n];
while(i<= mid && j <= high)
{
if(a[i] < a[j])
{
temp[k++] = a[i++];
}
else
{
temp[k++] = a[j++];
}
}
while(i <= mid)
{
temp[k++] = a[i++];
}
while(j<=high)
{
temp[k++] = a[j++];
}
for(i=low;i<=high;i++)
a[i]=temp[i];
}
}
main()
{
int n;
scanf("%d",&n);
int *a,i;
a=(int *)malloc(sizeof(int)*n);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
msort(a,0,n-1,n);
for(i=0;i<n;i++)
printf("%d ",a[i]);
}
================Merge sort on Array of Strings=================================
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void msort(char a[][100],int low ,int high,int n)
{
if(low < high)
{
int mid = (low+high)/2;
msort(a,low,mid,n);
msort(a,mid+1,high,n);
int i=low,j=mid+1,k=low;
char temp[n][100];
while(i<= mid && j <= high)
{
if(strcmp(a[i], a[j])<0)
{
strcpy(temp[k],a[i]);
k++;
i++;
}
else
{
strcpy(temp[k],a[j]);
k++;
j++;
}
}
while(i <= mid)
{
strcpy(temp[k],a[i]);
k++;
i++;
}
while(j<=high)
{
strcpy(temp[k],a[j]);
k++;
j++;
}
for(i=low;i<=high;i++)
strcpy(a[i],temp[i]);
}
}
main()
{
int n;
scanf("%d",&n);
int i;
char a[n][100];
for(i=0;i<n;i++)
scanf("%s",&a[i]);
msort(a,0,n-1,n);
for(i=0;i<n;i++)
printf("%s ",a[i]);
}
===========Merge Sort Simple Program Below===================================
#include <stdlib.h>
void msort(int a[],int low ,int high,int n)
{
if(low < high)
{
int mid = (low+high)/2;
msort(a,low,mid,n);
msort(a,mid+1,high,n);
int i=low,j=mid+1,k=low;
int temp[n];
while(i<= mid && j <= high)
{
if(a[i] < a[j])
{
temp[k++] = a[i++];
}
else
{
temp[k++] = a[j++];
}
}
while(i <= mid)
{
temp[k++] = a[i++];
}
while(j<=high)
{
temp[k++] = a[j++];
}
for(i=low;i<=high;i++)
a[i]=temp[i];
}
}
main()
{
int n;
scanf("%d",&n);
int *a,i;
a=(int *)malloc(sizeof(int)*n);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
msort(a,0,n-1,n);
for(i=0;i<n;i++)
printf("%d ",a[i]);
}
================Merge sort on Array of Strings=================================
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void msort(char a[][100],int low ,int high,int n)
{
if(low < high)
{
int mid = (low+high)/2;
msort(a,low,mid,n);
msort(a,mid+1,high,n);
int i=low,j=mid+1,k=low;
char temp[n][100];
while(i<= mid && j <= high)
{
if(strcmp(a[i], a[j])<0)
{
strcpy(temp[k],a[i]);
k++;
i++;
}
else
{
strcpy(temp[k],a[j]);
k++;
j++;
}
}
while(i <= mid)
{
strcpy(temp[k],a[i]);
k++;
i++;
}
while(j<=high)
{
strcpy(temp[k],a[j]);
k++;
j++;
}
for(i=low;i<=high;i++)
strcpy(a[i],temp[i]);
}
}
main()
{
int n;
scanf("%d",&n);
int i;
char a[n][100];
for(i=0;i<n;i++)
scanf("%s",&a[i]);
msort(a,0,n-1,n);
for(i=0;i<n;i++)
printf("%s ",a[i]);
}
===========Merge Sort Simple Program Below===================================
#include <stdio.h>
#define MAX 100
int c[MAX];
merge(int a[], int ,int ,int , int );
mergesort(int a[], int ,int);
main()
{
int n,i,a[MAX];
printf("enter
n value");
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
mergesort(a,0,n-1);
for(i=0;i<n;i++)
printf("%d\t",a[i]);
}
mergesort(int a[],int low, int high)
{
int mid;
if(low<high)
{
mid=(low+high)/2;
mergesort(a,low,mid);
mergesort(a,
mid+1,high);
merge(a,low,mid,mid+1,high);
}
}
/* merge two subparts obtained by dividing the array into 2 halves
(low1 to high1 and low2 to high2)*/
merge(int a[], int low1,int high1,int low2, int high2)
{
int i,j,k;
i=low1;
j=low2;
k=low1; /*after merging, lower index of merged
array begins with low1,ends with high2*/
while(i<= high1
&& j<=high2)
{
while(a[i]<=a[j]
&& i <=high1)
{
c[k++]=a[i++];
}
while(a[j]<a[i]&&
j <= high2)
{
c[k++]=a[j++];
}
}
while(i<=high1) /* if i <= high1 means there are
elements still in subpart1 (low1 to high1)*/
{
c[k++]=a[i++];
}
while(j<=high2)
{
c[k++]=a[j++];
}
for(k=low1;k<=high2;k++) /* the sorted sub array in 'c' is written
back to original array 'a'*/
{
a[k]=c[k];
}
}
No comments:
Post a Comment