В этой статье я покажу метод сортировки бинарным слиянием. В последнее время во многих университетах, преподаватели стали задавать за дачи именно основанном на этом методе сортировки, так как о нем мало информации, а та что есть в основном на англо язычных сайта, и примеры в основном написаны C++, а не на C#
Сортировка бинарным слиянием- это способ сортировки, который позволяет сгруппировать структуру элементов в определенном порядке. Суть его состоит в том что бы разбить его на части и с помощью рекурсии отсортировать. Метод очень удобен, но ресурс-затратен, но популярен и часто используется.
И так рассмотрим код ниже:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
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(); } |