#include<iostream>
using namespace std;
void Merge(int arr[], int low, int mid, int high)
{
int i = low;
int j = mid + 1;
int k = 0;
int *temp = new int[high - low + 1];
if (!temp)
{
cout << "ERROR!" << endl;
}
while (i <= mid&&j <= high)
{
if (arr[i] <= arr[j])
temp[k++] = arr[i++];
else
temp[k++] = arr[j++];
}
while (i <= mid) temp[k++] = arr[i++];
while (j <= high) temp[k++] = arr[j++];
for (int i = low, k = 0; i <= high; i++, k++)
arr[i] = temp[k];
delete[]temp;
}
void MergeSort(int arr[], int low, int high)
{
if (low < high)
{
int mid = (low + high) / 2;
MergeSort(arr, low, mid);
MergeSort(arr, mid + 1, high);
Merge(arr, low, mid, high);
}
}
int main()
{
int arr[] = { 10,9,8,7,6,5,4,3,2,1 };
MergeSort(arr, 0, 9);
for (int i = 0; i <= 9; i++)
{
cout << arr[i] << " ";
}
return 0;
}