using System.Collections.Generic;
public static void Main()
public static void MergeSort()
var nums = new int[]{3, 1, 2, 3, 6, 5,123,52,1,23,124,15,62,3,423,4,23,42,12,3,123};
foreach (var num in nums)
private static void Sort(int[] arr)
if (arr.Length == 2 && arr[0] > arr[1])
var leftSize = arr.Length / 2;
var rightSize = arr.Length - leftSize;
var leftArr = new int[leftSize];
var rightArr = new int[rightSize];
for (int i = 0; i < arr.Length; i++)
rightArr[i - leftSize] = arr[i];
Merge(leftArr, rightArr, arr);
private static void Merge(int[] leftArr, int[] rightArr, int[] parentArr)
while (leftIndex < leftArr.Length && rightIndex < rightArr.Length)
if (leftArr[leftIndex] <= rightArr[rightIndex])
parentArr[parentIndex] = leftArr[leftIndex++];
parentArr[parentIndex] = rightArr[rightIndex++];
while (rightIndex < rightArr.Length)
parentArr[parentIndex] = rightArr[rightIndex];
while (leftIndex < leftArr.Length)
parentArr[parentIndex] = leftArr[leftIndex];