В этой статье мы обсудим сортировку слиянием в C#
Слияние сортировка является одним из популярных алгоритмов сортировки в C#, поскольку он использует минимальное количество сравнений.
Идея сортировки слиянием заключается в том, что она объединяет два отсортированных списка.
Сортировка слиянием имеет порядок O(nlogn)
Вот высокоуровневое представление алгоритма сортировки слиянием:
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 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 |
using System; using System.Collections.Generic; using System.Text; namespace CSharpMergeSort { class Mergesort { static public void DoMerge(int[] numbers, int left, int mid, int right) { int[] temp = new int[25]; int i, left_end, num_elements, tmp_pos; left_end = (mid - 1); tmp_pos = left; num_elements = (right - left + 1); while ((left <= left_end) && (mid <= right)) { if (numbers[left] <= numbers[mid]) temp[tmp_pos++] = numbers[left++]; else temp[tmp_pos++] = numbers[mid++]; } while (left <= left_end) temp[tmp_pos++] = numbers[left++]; while (mid <= right) temp[tmp_pos++] = numbers[mid++]; for (i = 0; i < num_elements; i++) { numbers[right] = temp[right]; right--; } } static public void MergeSort_Recursive(int[] numbers, int left, int right) { int mid; if (right > left) { mid = (right + left) / 2; MergeSort_Recursive(numbers, left, mid); MergeSort_Recursive(numbers, (mid + 1), right); DoMerge(numbers, left, (mid + 1), right); } } static void Main(string[] args) { int[] numbers = { 3, 8, 7, 5, 2, 1, 9, 6, 4 }; int len = 9; Console.WriteLine("MergeSort рекурсивным методом"); MergeSort_Recursive(numbers, 0, len - 1); for (int i = 0; i < 9; i++) Console.WriteLine(numbers[i]); Console.ReadKey(); } } } |
Вывод:
MergeSort рекурсивным методом
1
2
3
4
5
6
7
8
9
пххаха, чел харош, взял код с другого сайта и переименовал классы. красавчег, я оценил)0))
А тебя не смущает что реализация алгоритма не может быть иной, если ее придумали и описали математики? Можно заменить часть кода Linq но от этого код не станет ясней.