using
System;
public
class
MergeSort
{
public
static
void
mergeSortUtil(
int
[] arr,
int
left,
int
right)
{
if
(right - left <= 1)
{
return
;
}
var
mid = left + (
int
)((right - left) / 2);
MergeSort.mergeSortUtil(arr, left, mid);
MergeSort.mergeSortUtil(arr, mid, right);
MergeSort.merge(arr, left, mid, right);
}
public
static
void
merge(
int
[] arr,
int
left,
int
mid,
int
right)
{
int
[] temp =
new
int
[right - left];
var
i = left;
var
j = mid;
var
k = 0;
while
(i < mid && j < right)
{
if
(arr[i] < arr[j])
{
temp[k++] = arr[i++];
}
else
{
temp[k++] = arr[j++];
}
}
while
(i < mid)
{
temp[k++] = arr[i++];
}
while
(j < right)
{
temp[k++] = arr[j++];
}
for
(i = left, k = 0; i < right; i++, k++)
{
arr[i] = temp[k];
}
}
public
static
void
mergeSort(
int
[] arr)
{
MergeSort.mergeSortUtil(arr, 0, arr.Length);
}
public
static
void
Main(String[] args)
{
int
[] arr = {5, 6, 3, 2, 1, 6, 7};
MergeSort.mergeSort(arr);
foreach
(
int
i
in
arr)
{ Console.Write(i.ToString() +
" "
);
}
}
}