using System.Collections.Generic;
public static void Main()
List<int> unsorted = new List<int>();
Random random = new Random();
Console.WriteLine("Original array elements:" );
for(int i = 0; i< 10000;i++){
unsorted.Add(random.Next(0,100));
Console.Write(unsorted[i]+" ");
DateTime dt = DateTime.Now;
sorted = MergeSort(unsorted);
TimeSpan secondTime = DateTime.Now- dt;
Console.WriteLine(secondTime.ToString());
Console.WriteLine("Sorted array elements: ");
foreach (int x in sorted)
private static List<int> MergeSort(List<int> unsorted)
List<int> left = new List<int>();
List<int> right = new List<int>();
int middle = unsorted.Count / 2;
for (int i = 0; i < middle;i++)
for (int i = middle; i < unsorted.Count; i++)
right = MergeSort(right);
return Merge(left, right);
private static List<int> Merge(List<int> left, List<int> right)
List<int> result = new List<int>();
while(left.Count > 0 || right.Count>0)
if (left.Count > 0 && right.Count > 0)
if (left.First() <= right.First())
result.Add(left.First());
left.Remove(left.First());
result.Add(right.First());
right.Remove(right.First());
result.Add(left.First());
left.Remove(left.First());
else if (right.Count > 0)
result.Add(right.First());
right.Remove(right.First());