public static void Main()
TestMergeSort(new int[]{1,5,3,2,6,3,2,4,82,45,13,29,10,22,1,2,56,7,14,24,74,34,1,4,7,2,5,1,6,2,4});
public static void TestMergeSort(int[] nums){
foreach(var num in nums){
var results = MergeSort(nums);
foreach(var result in results){
Console.WriteLine(unsorted);
Console.WriteLine(sorted);
public static int[] MergeSort(int[] nums){
var half = nums.Length/2;
MergeSort(GetSubArray(nums, 0, half)),
MergeSort(GetSubArray(nums, half, nums.Length-half))
public static int[] Merge(int[] left, int[] right){
var sorted = new int[left.Length + right.Length];
for(var i=0; i< left.Length+right.Length; i++){
var leftVal = leftIndex < left.Length ? left[leftIndex] : int.MaxValue;
var rightVal = rightIndex < right.Length ? right[rightIndex] : int.MaxValue;
public static int[] GetSubArray(int[] original, int index, int length)
var newArray = new int[length];
Array.Copy(original, index, newArray, 0, length);