#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int merge(int *array, int arrStart, int arrMiddle, int arrEnd) {
int arrLen = arrEnd - arrStart;
if (arrLen < 2) return 0;
int *temp = (int *) malloc(arrLen * sizeof(int));
int i = arrStart;
int j = arrMiddle;
int tempIndex = 0;
int count = 0;
while (i<arrMiddle && j<arrEnd)
if (array[i] > array[j])
temp[tempIndex++] = array[j++];
else temp[tempIndex++] = array[i++];
while (i < arrMiddle) temp[tempIndex++] = array[i++];
while (j < arrEnd) temp[tempIndex++] = array[j++];
for ((tempIndex=0, i=arrStart); (tempIndex<arrLen && i<arrEnd); (++tempIndex, ++i))
array[i] = temp[tempIndex];
free(temp);
temp = NULL;
return 1;
}
int mergeSort(int *array, int arrStart, int arrEnd) {
int arrLen = arrEnd - arrStart;
if (arrLen <= 1) return 0;
int count = 0;
int middle = arrStart + floor(arrLen / 2);
mergeSort(array, arrStart, middle);
mergeSort(array, middle, arrEnd);
return merge(array, arrStart, middle, arrEnd);
}
int main() {
int array[] = {2, 4, 3, 1, 5, 6};
int arrayLen = sizeof(array)/sizeof(int);
int i = 0;
for (i=0; i<arrayLen; i++) printf("%d ", array[i]);
printf("\n");
int count = mergeSort(array, 0, arrayLen);
for (i=0; i<arrayLen; i++) printf("%d ", array[i]);
return 0;
}