Я просто читал книгу руководства по алгоритму алгоритма Skiena, в частности раздел «Сортировка кучи». Он утверждает, чтоКуча Сортовая пространственная сложность
Это вроде на месте, то есть он не использует дополнительную память над массив, содержащий элементы, которые будут сортироваться
алгоритм в книге выглядит следующим образом:
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) и требует примерно удвоенной памяти, а не «лишней памяти»?
Надеюсь (и традиционно), куча установлена в массиве для сортировки. – greybeard
@greybeard Я не уверен, что следую тому, что вы говорите. Если вам задан несортированный массив, как вы можете преобразовать его (на место) в кучу? – jcm
(Вы заставляете меня задуматься о презентации в книге Скиена.) Преобразование на месте массива в произвольном порядке в _implicit_ heap (отношение ancestor <-> потомок определяется индексом массива) - это просто перестановка на месте, соответствующая операция имена «heapify» и «sift». Помимо основ, есть [Вегенер] (http://puma.uni-kassel.de/author/Wegener/heapsort), чтобы спросить, какие ключи сравнивать, и [smooth sort] (http://www.keithschwarz.com/smoothsort /) для вариации, которая слишком недопредставлена, учитывая ее способность полностью использовать существующий порядок. – greybeard