#include <iostream>
using namespace std;
void Merge(int a[], int left, int right, int mid)
{
int mid_1 = mid + 1;
int l = left;
int i = 0;
int *A = new int[right-left+1];
while(l <= mid && mid_1 <= right)
{
if (a[l] <= a[mid_1])
{
A[i++] = a[l++];
}
else
{
A[i++] = a[mid_1++];
}
}
while (l <= mid)
{
A[i++] = a[l++];
}
while (mid_1 <= right)
{
A[i++] = a[mid_1++];
}
int u = 0;
for (int k = left; k <= right; k++)
{
a[k] = A[u++];
}
}
void MergeSort(int a[], int left, int right)
{
if (left >= right)
{
return;
}
int mid = left + (right - left) / 2;
MergeSort(a, left, mid);
MergeSort(a, mid + 1, right);
Merge(a, left, right, mid);
}
void Merges(int a[], int size)
{
MergeSort(a, 0, size - 1);
}
int main()
{
int a[10]{ 1,3,72,9,2,4,6,8,2,11 };
for (int i = 0; i < 10; i++)
cout << a[i] << ends;
cout << endl;
Merges(a, 10);
for (int i = 0; i < 10; i++)
cout << a[i] << ends;
}