.NET 4.x Сортировка слиянием - C#

Узнай цену своей работы

Формулировка задачи:

Есть желающие реализовать сортировку слиянием без рекурсии (generic, iterative merge-sort), с обобщёнными типами и с перегрузкой для сортировки части массива (index - индекс включая от которого сортируется последовательность длинной length внутри массива array)?
Листинг программы
  1. internal static class MergeSort
  2. {
  3. public static void Sort<T>(T[] array, int index, int length, Comparison<T> comparison)
  4. {
  5. var b = new T[length];
  6. for (var width = index + 1; width < length; width = 2 * width)
  7. {
  8. for (var i = index; i < length; i = i + 2 * width)
  9. Merge(array, b, i, Math.Min(i + width, length), Math.Min(i + 2 * width, length), comparison);
  10. Array.Copy(b, 0, array, index, length);
  11. }
  12. }
  13. private static void Merge<T>(T[] a, T[] b, int left, int midle, int right, Comparison<T> comparison)
  14. {
  15. var l = left;
  16. var m = midle;
  17. for (var j = left; j < right; j++)
  18. if (l >= midle || (m < right && comparison(a[l], a[m]) > 0))
  19. b[j] = a[m++];
  20. else
  21. b[j] = a[l++];
  22. }
  23. }
Критикуем

Решение задачи: «.NET 4.x Сортировка слиянием»

textual
Листинг программы
  1.         public static IEnumerable<T> MSort<T>(this IEnumerable<T> list) where T : IComparable<T>
  2.         {
  3.             if (!list.Any()) return Enumerable.Empty<T>();
  4.             Int32 begin = 0;
  5.             Int32 end = list.Count();
  6.             Int32 middle = (begin + end) / 2;
  7.             IEnumerable<T> first = list.Skip(begin).Where(item => middle + 1 > end || (begin <= middle + 1 && BooleanFunctions<T, Boolean>.Less(list.ElementAt(begin), list.ElementAt(middle + 1))));
  8.             IEnumerable<T> second = list.Skip(middle + 2).Where(item => middle + 2 > end || (begin <= middle + 2 && BooleanFunctions<T, Boolean>.Less(list.ElementAt(middle + 2), list.ElementAt(end))));
  9.             return first.Concat(second);
  10.         }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы