#include <stdio.h>
#include <stdlib.h>
#define N 10
void merge(int A[], int aLen, int B[], int bLen, int C[], int cLen)
{
int i = 0, j = 0, k = 0;
while ((i < bLen) && (j < cLen))
{
if (B[i] < C[j])
{
A[k] = B[i];
i++;
}
else
{
A[k] = C[j];
j++;
}
k++;
}
while (j < cLen)
{
A[k] = C[j];
j++;
k++;
}
while (i < bLen)
{
A[k] = B[i];
i++;
k++;
}
}
void mergeSort(int arr[], int n)
{
// exit condition
if (n <= 1)
return;
// make two arrays of half the size
int B[n / 2], C[n / 2];
for (int i = 0; i < n / 2; i++)
B[i] = arr[i];
mergeSort(B, n / 2);
for (int i = n / 2; i < n; i++)
C[i - n / 2] = arr[i];
mergeSort(C, n / 2);
merge(arr, n, B, n / 2, C, n / 2);
}
void main()
{
int arr[10] = {2, 5, 1, 3, 7, 6, 4, 9, 8, 10};
int n = 10;
printf("\n--- INPUT ARRAY ---\n");
for (int i = 0; i < n; i++)
printf("%d ", arr[i]);
mergeSort(arr, n);
printf("\n--- SORTED ARRAY ---\n");
for (int i = 0; i < n; i++)
printf("%d ", arr[i]);
}