Пирамидальная сортировка Java

В общем, есть код, реализующий Пирамидальную сортировку... с некоторыми "нюансами". Код вроде бы работает так, как и должен работать, НО, как оказалось, нужно всё это сделать без рекурсии и в функции heapSort нужно уменьшить количество итераций во втором цикле.

Буду крайне благодарен за помощь свыше, если не сойду с ума раньше.

Вот код:

import java.util.Arrays;

public class HeapSort {
    public static void siftDown(int[] array, int heapSize, int rootIndex) {
        int leftElementIndex = 2 * rootIndex + 1;
        int rightElementIndex = 2 * rootIndex + 2;
        int maxElementIndex = rootIndex;

        if (leftElementIndex < heapSize && array[leftElementIndex] > array[maxElementIndex])
            maxElementIndex = leftElementIndex;

        if (rightElementIndex < heapSize && array[rightElementIndex] > array[maxElementIndex])
            maxElementIndex = rightElementIndex;

        if (maxElementIndex != rootIndex) {
            int temp = array[rootIndex];
            array[rootIndex] = array[maxElementIndex];
            array[maxElementIndex] = temp;

            siftDown(array, heapSize, maxElementIndex);
        }
    }

    public static void heapSort(int[] array) {
        for (int i = array.length / 2 - 1; i >= 0; i--) {
            siftDown(array, array.length, i);
        }

        for (int i = array.length - 1; i >= 0; i--) {
            int temp = array[0];
            array[0] = array[i];
            array[i] = temp;

            siftDown(array, i, 0);
        }
    }

    public static void main(String[] args) {
        int[] array = {7, 12, 4, 2, 9, 16};
        System.out.println(Arrays.toString(array));

        heapSort(array);

        System.out.println(Arrays.toString(array));
    }
}

Ответы (0 шт):