/// <summary> /// Пирамидальная сортировка /// </summary> /// <typeparam name="T">Тип</typeparam> /// <param name="items">Массив</param> public static void SortHeap <T>(this T[] items) where T : IComparable <T> { // Делаем бинарную кучу из массива ArrayExtensions.BinaryHeapMake(items); // Идем по куче от конца, на каждом цикле извлекаем из кучи верхний элемент и перестраиваем ее // после чего в куче остается на 1 элемент меньше и верхних элемент размещаем в конце массива. // На следующем шаге будет опять извлечен верхний элемент и помещен в конец массива перед предыдущим for (int i = items.Length - 1; i >= 0; i--) { // i + 1 - так как надо передать длинну кучу var element = ArrayExtensions.BinaryHeapRemoveTopItem(items, i + 1); items[i] = element; } }