using
System;
using
System.Collections.Generic;
class
Program
{
static
void
Merge(List<
int
> array,
int
p,
int
q,
int
r)
{
int
n1 = q - p + 1;
int
n2 = r - q;
List<
int
> leftArray =
new
List<
int
>(n1);
List<
int
> rightArray =
new
List<
int
>(n2);
for
(
int
x = 0; x < n1; ++x)
{
leftArray.Add(array[p + x]);
}
for
(
int
y = 0; y < n2; ++y)
{
rightArray.Add(array[q + 1 + y]);
}
int
i = 0, j = 0;
int
k = p;
while
(i < n1 && j < n2)
{
if
(leftArray[i] <= rightArray[j])
{
array[k] = leftArray[i];
++i;
}
else
{
array[k] = rightArray[j];
++j;
}
++k;
}
while
(i < n1)
{
array[k] = leftArray[i];
++i;
++k;
}
while
(j < n2)
{
array[k] = rightArray[j];
++j;
++k;
}
}
static
void
MergeSort(List<
int
> array,
int
left,
int
right)
{
if
(left < right)
{
int
mid = (left + right) / 2;
MergeSort(array, left, mid);
MergeSort(array, mid + 1, right);
Merge(array, left, mid, right);
}
}
static
void
Main(
string
[] args)
{
List<
int
> array =
new
List<
int
> { 6, 5, 12, 10, 9, 1 };
MergeSort(array, 0, array.Count - 1);
Console.WriteLine(
"Sorted Array:"
);
foreach
(
int
num
in
array)
{
Console.Write(num +
" "
);
}
Console.WriteLine();
}
}