#include <iostream>
using namespace std;
bool merge(int arr[], int arrStart, int mid, int arrEnd){
int *temp = new int(arrEnd-arrStart);
int i = arrStart;
int j = arrEnd;
int tempIndex = 0;
while(i<mid && j<arrEnd){
if(arr[i]>arr[j]){
temp[tempIndex] = arr[j];
j++;
}else{
temp[tempIndex] = arr[i];
i++;
}
++tempIndex;
}
while(i<mid){
++tempIndex;
++i;
}
while(i<arrEnd){
++tempIndex;
++j;
}
for(int k=arrStart; k<arrEnd; k++){
arr[k] = temp[k-arrStart];
}
delete temp;
}
bool MergeSort(int arr[], int arrStart, int arrEnd){
int len = arrEnd-arrStart;
if (len == 1){
return true;
}
int mid = arrStart + len/2;
MergeSort(arr,arrStart,mid);
MergeSort(arr,mid,arrEnd);
return merge(arr,arrStart, mid, arrEnd);
}
void printArr(int arr[], int arrLen) {
for (int i = 0; i < arrLen; ++i) {
cout << arr[i] << " ";
}
cout << endl;
}
int main() {
int arr[] = {11,8,3,9,7,1,2,5} ;
arrLen = sizeof(arr)/sizeof(int);
printArr(arr, arrLen);
MergeSort(arr, 0, arrLen);
printArr(arr, arrLen);
cout << "Hello world! - cpp.jsrun.net." << endl;
return 0;
}