OneCompiler

Merge sort (DSA)

160

#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;
}