#include <iostream>
using namespace std;
void Msort(int a[], int start, int stop)
{
if (stop - start > 1)
{
Msort(a, start, start + (stop - start) / 2);
Msort(a, start + (stop - start) / 2+1, stop);
int *temp = new int[stop - start + 1];
int i = start;
int j = start + (stop - start) / 2 + 1;
int k = 0;
while (i <= (start + (stop - start) / 2) && j <= stop)
{
if (a[i]<a[j])
{
temp[k] = a[i];
i++;
}
else
{
temp[k] = a[j];
j++;
}
k++;
}
while (i <= (start + (stop - start) / 2))
{
temp[k] = a[i];
i++;
k++;
}
while (j <= stop)
{
temp[k] = a[j];
j++;
k++;
}
for (int m = start; m <= stop; ++m)
{
a[m] = temp[m - start];
}
}
else
{
if (a[start] > a[stop])
{
int temp = a[start];
a[start] = a[stop];
a[stop] = temp;
}
}
}
void main()
{
int a[] = {2,6,12,1,8,7,2,3,7,5,4,5};
Msort(a, 0, 11);
for (int i = 0; i < 12; ++i)
{
cout << a[i] << endl;
}
}