Я считаю, что принятый ответ неверен.
Построение кучи снизу вверх - это фактически O (n), но это только верхняя граница, которая применима к общему случаю.Это возможно лучше, чем в конкретных случаях, например, когда у нас есть 8 элементов.Ниже я приведу хотя бы один способ построения кучи из 8 элементов за 8 сравнений.
Допустим, у нас есть 8 элементов {A, B, C, D, E, F, G,H}, и мы ничего не знаем об их относительном порядке.Мы начнем с сравнения любых четырех пар из восьми элементов.После этого шага мы сделали 4 сравнения и теперь имеем 4 «упорядоченные» пары, как показано ниже:
A > B, C > D, E > F, G > H
Теперь обратите внимание, что с 1 сравнением мы можем собрать две пары вместе в дереве N =4. Например, если мы возьмем первые две пары и сравним A и C, мы получим либо дерево слева внизу (если A> C), либо дерево справа (если C> A):
A | C
C B | A D
D | B
Мы применяем тот же процесс к двум другим парам, заканчивая двумя деревьями с N = 4, используя 6 сравнений.У нас есть что-то вроде:
A E
C B and G F
D H
С помощью одного дополнительного сравнения мы можем решить, какой из них имеет более высокий порядок между A или E. Скажем, A > E
без потери общности.Мы использовали 7 сравнений.Наконец, мы используем наше последнее сравнение слева, чтобы определить порядок элементов ниже A (B и C) и используем эту информацию, чтобы переставить дерево слева вверху в одно из двух ниже (B> C слева, C>B справа):
A | A
B | C
C D | B D
Наконец, поскольку мы уже знаем, что A > E
, теперь легко объединить два дерева, которые у нас есть (одно с корнем в E, а второе с A), как показано ниже:
A
E B
G F D C
H
И все готово, у нас есть куча из 8 элементов, построенных с 8 сравнениями.Надеюсь, все было понятно, хахаха