Я просто читал книгу Skiena Algorithm Design Manual, в частности раздел о сортировке кучей. Он заявляет, что
Это сортировка на месте, то есть она не использует дополнительную память для массива, содержащего сортируемые элементы.
алгоритм в книге выглядит так:
heapsort(item_type s[], int n)
{
int i;
priority_queue q;
make_heap(&q, s, n);
for (i=0; i<n; i++)
s[i] = extract_min(&q);
}
Мне кажется, что в дополнение к входному массиву элементов s
мы создаем структуру данных кучи в переменной priority_queue
. Разве это не означает, что требуемая пространственная сложность равна O(n) и требует примерно вдвое больше памяти, а не «без дополнительной памяти»?
heapify
иsift
. Помимо основ, есть Wegener, чтобы спросить, какие ключи сравнивать, и < href="http://www.keithschwarz.com/smoothsort/" rel="nofollow noreferrer">гладкая сортировка для вариации, досадно недопредставленной, учитывая ее способность полностью использовать ранее существовавший порядок. - person greybeard   schedule 22.11.2014