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

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

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

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

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

textual
Листинг программы
        public static IEnumerable<T> MSort<T>(this IEnumerable<T> list) where T : IComparable<T>
        {
            if (!list.Any()) return Enumerable.Empty<T>();
            Int32 begin = 0;
            Int32 end = list.Count();
            Int32 middle = (begin + end) / 2;
            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))));
            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))));
            return first.Concat(second);
        }

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


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

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

7   голосов , оценка 4 из 5
Похожие ответы