Может ли Heap Sort копировать все элементы?

219
21 августа 2017, 07:53

Наткнулся на реализацию 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();
}
Answer 1

Heap sort работает конкретно с деревом, а не массивом. Если бы вы в функцию передавали уже готовое дерево, то за сортировку бы отвечала только строка

for (int i=0; i<array.length; i++)
    array[i] = heap.remove();

В данной реализации предполагается, что передается массив, из которого нужно сделать дерево. Имеется ввиду, что не требуется дополнительная память, если данные представлены в виде дерева.

READ ALSO
Java не срабатывает repaint()

Java не срабатывает repaint()

Добрый деньЕсть изображение, и методы paintComponent(Graphics g) и repaint()

282
Java - упражнение с массивом

Java - упражнение с массивом

Взял тут в руки книжку (Кен Арнольд, Джеймс Гослинг - Язык программирования JAVA), и застрял в самом начале

224
Слетела кодировка в Sublime Text и на сайте

Слетела кодировка в Sublime Text и на сайте

Слетела кодировка ,стоит utf-8,а щас просто вопросикиОткрыл файл ,чтобы просто картинки в HTML поменять и слетела кодировка,я сохранил и она на сайте...

308
Не загружаются все данные при переходе с одной сцены в другую

Не загружаются все данные при переходе с одной сцены в другую

Есть 2 сцены, первая меню а вторая сама игра, есть масcив которому даю значения через едитор, если запускаю сразу сцену игры то всё нормально...

386