Merge sort (DSA)
#include<stdio.h>
void merge(int arr[50], int start , int mid , int end )
{
int i = start;
int j = mid+1;
int temp[50];
int k=0;
while(i<=mid && j<=end)
{
if(arr[i]>arr[j])
{
temp[k]=arr[j];
j++,k++;
}
else
{
temp[k]=arr[i];
i++,k++;
}
}
while(i<=mid)
{
temp[k]=arr[i];
i++,k++;
}
while(j<=end)
{
temp[k]=arr[j];
j++,k++;
}
for(int i=start; i<=end; i++)
{
arr[i] = temp[i-start];
}
}
void mergesort(int arr[50], int start , int end)
{
if(end-start > 0)
{
int mid = (start + end)/2;
mergesort(arr,start,mid);
mergesort(arr,mid+1,end);
merge(arr,start,mid,end);
}
}
void display(int arr[50], int n)
{
printf("The sorted array is \n");
for (int i = 0; i < n; i++)
{
printf("%d ",arr[i]);
}
printf("\n");
}
int main()
{
int n;
printf("\nEnter the number of elements in the array: ");
scanf("%d",&n);
int arr[50]={0};
printf("Enter the unsorted array \n");
for (int i = 0; i < n; i++)
{
printf("Element at %d index : ",i);
scanf("%d", &arr[i]);
}
mergesort(arr,0,n-1);
display(arr,n);
return 0;
}