#include <stdio.h>
#include <stdlib.h>
#define MAX_INT 655354
#define NUM 16
void mergeSort(int array[],int p,int r);
void merge(int array[], int p, int q, int r);
int main()
{
int array[NUM] = {23,12,3,4,2,3,234,5655,34,123,445,44,3,4,56,78};
int i ;
mergeSort(array,0,NUM - 1);
for(i = 0; i < NUM; ++i )
{
printf("%d ",array[i]);
}
return 0;
}
void merge(int array[], int p, int q, int r)
{
int n1 = q - p + 1;
int n2 = r - q;
int L[n1];
int R[n2];
int i,j,t;
for(i = 0; i < n1; ++i)
{
L[i] = array[p + i];
}
for(j = 0; j < n2; ++ j)
{
R[j] = array[q + j + 1];
}
L[i] = MAX_INT;
R[j] = MAX_INT;
i = 0;
j = 0;
for(t = p; t <= r; ++t)
{
if(L[i] < R[j])
{
array[t] = L[i++];
}
else
{
array[t] = R[j++];
}
}
}
void mergeSort(int array[],int p,int r)
{
if(p < r)
{
int middle = (p + r) / 2;
mergeSort(array,p,middle);
mergeSort(array,middle + 1,r);
merge(array,p,middle,r);
}
}