using System.Collections.Generic;
public static void Main()
var input = new List<int[]>
var result = MergeAll(input, 0, input.Count);
foreach(var index in result)
Console.Write(index + ", ");
public static int[] MergeAll(List<int[]> input, int start, int end)
return MergeArrays(input[start], input[end]);
int mid = (int)Math.Floor((double)(start+end)/2);
var upper = MergeAll(input, mid + 1, end);
var lower = MergeAll(input, start, mid);
return MergeArrays(upper, lower);
public static int[] MergeArrays(int[] arr1, int[] arr2)
int[] mergedArray = new int[n + m];
for(int i = 0, j = 0, k = 0; k < m+ n; k ++)
mergedArray[k] = arr1[i];
mergedArray[k] = arr2[j];
mergedArray[k] = arr1[i];
mergedArray[k] = arr2[j];