Сортировка методом бинарное слияние.

В этой статье я покажу метод сортировки бинарным слиянием. В последнее время во многих университетах, преподаватели стали задавать за дачи именно основанном на этом методе сортировки, так как о нем мало информации, а та что есть в основном на англо язычных сайта, и примеры в основном написаны 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();
		}

 

Обновлено: 20.10.2017 — 19:51

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.