#include <stdio.h>
void merge(int arr[], int arrStart, int mid, int arrEnd) {
int i = arrStart;
int j = mid;
int arrLen = arrEnd - arrStart;
if(arrLen < 2) {
return 0;
}
int *temp = new int(arrEnd - arrStart);
int tempIndex = 0;
while(i < mid && j < arrEnd) {
if(temp[i] > temp[j]) {
temp[tempIndex] = arr[j];
++j;
}else {
temp[tempIndex] = arr[i];
++i;
}
++tempIndex;
}
while(i < mid) {
temp[tempIndex++] = arr[i++];
}
while(j < arrEnd) {
temp[tempIndex++] = arr[j++];
}
for(int i = 0; i < arrEnd; i ++) {
printf("%d ",temp[i]);
}
}
int mergeSort(int arr[], int arrStart, int arrEnd) {
int arrLen = arrEnd - arrStart;
if (arrLen == 1) {
return 1;
}
int mid = arrStart + arrLen/2;
mergeSort(arr, arrStart, mid);
mergeSort(arr, mid, arrEnd);
return merge(arr, arrStart, mid, arrEnd);
}
int main () {
int array[] = {11, 8, 3, 9, 7, 1, 2, 5};
int arrStart = 0;
int arrEnd = 9;
mergeSort(array,arrStart,arrEnd);
return 0;
}