public static void Main()
int[] array = new int[] { 5, 2, 6, 4, 7, 10, 1, 9, 3, 8 };
array = MergeSort(array);
for (int index = 0; index < array.Length; index++)
Console.WriteLine("element[{0}] = {1}", index, array[index]);
public static int[] MergeSort(int[] array)
int middleIndex = (array.Length) / 2;
int[] left = new int[middleIndex];
int[] right = new int[array.Length - middleIndex];
Array.Copy(array, left, middleIndex);
Array.Copy(array, middleIndex, right, 0, right.Length);
right = MergeSort(right);
return Merge(left, right);
public static int[] Merge(int[] left, int[] right)
List<int> leftList = left.OfType<int>().ToList();
List<int> rightList = right.OfType<int>().ToList();
List<int> resultList = new List<int>();
while (leftList.Count > 0 || rightList.Count > 0)
if (leftList.Count > 0 && rightList.Count > 0)
if (leftList[0] <= rightList[0])
resultList.Add(leftList[0]);
resultList.Add(rightList[0]);
else if (leftList.Count > 0)
resultList.Add(leftList[0]);
else if (rightList.Count > 0)
resultList.Add(rightList[0]);
int[] result = resultList.ToArray();