using System.Collections.Generic;
public static void Main()
List<int> unsortedList = SplitWords(Console.ReadLine()).Select(int.Parse).ToList();
List<int> res = SortList(unsortedList);
Console.WriteLine("Result: " + String.Join(" ", res));
public static List<string> SplitWords(string s)
return string.IsNullOrEmpty(s) ? new List<string>() : s.Trim().Split(' ').ToList();
public static List<int> SortList(List<int> unsortedList)
Console.WriteLine("Sorting " + String.Join(" ", unsortedList));
return SortListInterval(unsortedList, 0, unsortedList.Count);
public static List<int> SortListInterval(List<int> unsortedList, int start, int end)
return unsortedList.GetRange(start, size);
List<int> resultList = new List<int>();
var midpoint = (start + end) / 2;
var leftList = SortListInterval(unsortedList, start, midpoint);
var rightList = SortListInterval(unsortedList, midpoint, end);
while(leftPointer < leftList.Count || rightPointer < rightList.Count) {
if(leftPointer == leftList.Count ) {
resultList.Add(rightList[rightPointer]);
else if(rightPointer == rightList.Count) {
resultList.Add(leftList[leftPointer]);
else if(leftList[leftPointer] < rightList[rightPointer]) {
resultList.Add(leftList[leftPointer]);
resultList.Add(rightList[rightPointer]);