В этой статье я покажу метод сортировки бинарным слиянием. В последнее время во многих университетах, преподаватели стали задавать за дачи именно основанном на этом методе сортировки, так как о нем мало информации, а та что есть в основном на англо язычных сайта, и примеры в основном написаны C++, а не на C#
Сортировка бинарным слиянием- это способ сортировки, который позволяет сгруппировать структуру элементов в определенном порядке. Суть его состоит в том что бы разбить его на части и с помощью рекурсии отсортировать. Метод очень удобен, но ресурс-затратен, но популярен и часто используется.
И так рассмотрим код ниже:
static IComparable[] Merge_Sort(IComparable[] massive) { if (massive.Length == 1) return massive; int mid_point = massive.Length / 2; return Merge(Merge_Sort(massive.Take(mid_point).ToArray()), Merge_Sort(massive.Skip(mid_point).ToArray())); } static IComparable[] Merge(IComparable[] mass1, IComparable[] mass2) { int a = 0, b = 0; IComparable[] merged = new IComparable[mass1.Length + mass2.Length]; for (int i = 0; i < mass1.Length + mass2.Length; i++) { if (b.CompareTo(mass2.Length) < 0 && a.CompareTo(mass1.Length) < 0) if (mass1[a].CompareTo(mass2[b]) > 0) merged[i] = mass2[b++]; else merged[i] = mass1[a++]; else if (b < mass2.Length) merged[i] = mass2[b++]; else merged[i] = mass1[a++]; } return merged; } static void Main(string[] args) { IComparable[] arr = new IComparable[100]; Random rd = new Random(); for (int i = 0; i < arr.Length; ++i) arr[i] = rd.Next(1, 101); Console.WriteLine("Массив перед сортировкой:"); foreach (int x in arr) System.Console.Write(x + " "); arr = Merge_Sort(arr); Console.WriteLine("\n\nМассив после сортировки:"); foreach (int x in arr) System.Console.Write(x + " "); Console.WriteLine("\n\nДля выхода нажмите <Enter>."); Console.ReadKey(); }