Ejemplo n.º 1
0
        /// <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;
            }
        }