public static void Main()
int[] input = new int[10] {8, 34, 9, 17, 1, 65, 23, 29, 6, 54};
var result = MergeSort(input);
Console.Write($"Final: ");
for(int i = 0; i < result.Length; i++)
Console.Write(input[i] + " ");
public static int[] MergeSort(int[] array)
Console.Write($"Array: ");
for(int k = 0; k < array.Length; k++)
Console.Write($"{array[k]}" + " ");
Console.WriteLine($"MergeSort: lSize: {rSize}, rSize: {rSize}");
int[] left = new int[lSize];
int[] right = new int[rSize];
right[rIndex] = array[i];
var newLeft = MergeSort(left);
for(int k = 0; k < newLeft.Length; k++)
Console.Write($"NewLeft: {newLeft[k]}" + " ");
var newRight = MergeSort(right);
for(int k = 0; k < newRight.Length; k++)
Console.Write($"NewRight: {newRight[k]}" + " ");
var interimResult = Merge(newLeft, newRight, array);
Console.Write("Interim Result: ");
for(int k = 0; k < interimResult.Length; k++)
Console.Write($"{interimResult[k]}" + " ");
public static int[] Merge(int[] left, int[] right, int[] array)
while(leftIndex < left.Length && rightIndex < right.Length)
if(left[leftIndex] < right[rightIndex])
array[arrayIndex] = left[leftIndex];
array[arrayIndex] = right[rightIndex];
if(leftIndex < left.Length)
for(int i = leftIndex; i<left.Length; i++)
array[arrayIndex] = left[leftIndex];
for(int i = rightIndex; i<right.Length; i++)
array[arrayIndex] = right[rightIndex];