From 0d1dc719e1cfde1434e6faebab1401fdb0209499 Mon Sep 17 00:00:00 2001 From: Divlo Date: Sat, 11 Sep 2021 18:55:46 +0200 Subject: [PATCH] feat(solutions): add `sorting-algorithms/cs/merge-sort` --- .../solutions/cs/merge-sort/README.md | 3 + .../solutions/cs/merge-sort/Solution.cs | 76 +++++++++++++++++++ 2 files changed, 79 insertions(+) create mode 100644 challenges/sorting-algorithms/solutions/cs/merge-sort/README.md create mode 100644 challenges/sorting-algorithms/solutions/cs/merge-sort/Solution.cs diff --git a/challenges/sorting-algorithms/solutions/cs/merge-sort/README.md b/challenges/sorting-algorithms/solutions/cs/merge-sort/README.md new file mode 100644 index 0000000..b91d4cb --- /dev/null +++ b/challenges/sorting-algorithms/solutions/cs/merge-sort/README.md @@ -0,0 +1,3 @@ +# sorting-algorithms/cs/merge-sort + +Created by [@Divlo](https://github.com/Divlo) on 11 September 2021. diff --git a/challenges/sorting-algorithms/solutions/cs/merge-sort/Solution.cs b/challenges/sorting-algorithms/solutions/cs/merge-sort/Solution.cs new file mode 100644 index 0000000..815080a --- /dev/null +++ b/challenges/sorting-algorithms/solutions/cs/merge-sort/Solution.cs @@ -0,0 +1,76 @@ +using System; +using System.Collections.Generic; + +namespace Solution +{ + class Program + { + static void Main() + { + string line = Console.ReadLine(); + List numbers = new List(); + while ((line = Console.ReadLine()) != null) + { + numbers.Add(int.Parse(line)); + } + int[] result = MergeSort(numbers.ToArray()); + foreach (int number in result) + { + Console.WriteLine(number); + } + } + + public static int[] MergeSort(int[] array) + { + if (array.Length <= 1) + { + return array; + } + int middle = array.Length / 2; + int[] left = new int[middle]; + int[] right = new int[array.Length - middle]; + for (int index = 0; index < middle; index++) + { + left[index] = array[index]; + } + for (int index = middle; index < array.Length; index++) + { + right[index - middle] = array[index]; + } + left = MergeSort(left); + right = MergeSort(right); + return Merge(left, right); + } + + public static int[] Merge(int[] left, int[] right) + { + int[] result = new int[left.Length + right.Length]; + int leftIndex = 0; + int rightIndex = 0; + for (int index = 0; index < result.Length; index++) + { + if (leftIndex >= left.Length) + { + result[index] = right[rightIndex]; + rightIndex++; + } + else if (rightIndex >= right.Length) + { + result[index] = left[leftIndex]; + leftIndex++; + } + else if (left[leftIndex] < right[rightIndex]) + { + result[index] = left[leftIndex]; + leftIndex++; + } + else + { + result[index] = right[rightIndex]; + rightIndex++; + } + } + return result; + } + } +}