Наткнулся на реализацию HeapSort на wikibooks использующую копирование элементов в PriorityQueue и обратно в массив. Но ведь одно из главных преимуществ HeapSort в том что она не использует дополнительную память, а сортирует элементы "на месте".
Что это ошибка в справочнике или мое непонимание?
import java.util.PriorityQueue;
public static <E extends Comparable<? super E>> void heapsort(E[] array) {
// Java's PriorityQueue class functions as a min heap
PriorityQueue<E> heap = new PriorityQueue<E>(array.length);
// Add each array element to the heap
for (E e : array)
heap.add(e);
// Elements come off the heap in ascending order
for (int i=0; i<array.length; i++)
array[i] = heap.remove();
}
Heap sort работает конкретно с деревом, а не массивом. Если бы вы в функцию передавали уже готовое дерево, то за сортировку бы отвечала только строка
for (int i=0; i<array.length; i++)
array[i] = heap.remove();
В данной реализации предполагается, что передается массив, из которого нужно сделать дерево. Имеется ввиду, что не требуется дополнительная память, если данные представлены в виде дерева.
Продвижение своими сайтами как стратегия роста и независимости