Пирамидальная сортировка 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));
}
}