Функция max-heapify
, как вы ее называете, является общей heapify
функцией (куча может использовать любую допустимую функцию сравнения для сортировки своих элементов). Он предназначен для использования в качестве init
функции для построения кучи из массива.
Сложности функций для работы с кучей (с их предполагаемым использованием):
init
( max-heapify ): O ( n ), используется для инициализации кучи из отсортированной последовательности (массива) (max- отсортировано, в вашем случае)
insert
: O (lg n ), используется для вставки одного элемента в кучу (поддерживает дерево сортировки "отсортированным")
delete
: O (lg n ), используется для удаления «наилучшего» (максимум, в вашем случае) элемента из кучи (поддерживает «сортировку» дерева кучи)
Но, поскольку этот вопрос помечен C++
, вам также следует рассмотреть возможность использования std::set
из STL
вместо реализации своей собственной кучи. Сложности рассматриваемых операций такие же, как и для любой реализации кучи, и она может легко работать с любой функцией сравнения (предварительно написанной или написанной пользователем). Еще одним преимуществом реализации кучи является то, что это отсортированный контейнер, и вы можете легко выполнять итерации по всем элементам в отсортированном порядке (не только по первому), не разрушая структуру.
Единственная проблема с std::set
заключается в том, что это уникальный контейнер, т. Е. В нем может существовать только 1 копия элемента с таким же ключом. Но есть решение и для этого - std::multiset
сохраняет отсортированные экземпляры нескольких объектов с одним и тем же ключом.
Кроме того, в зависимости от требуемого использования (если с ключом поиска связано много данных), вы также можете попробовать std::map
или std::multimap
.
Если вы хотите создать свою собственную реализацию кучи, я настоятельно рекомендую поместить ее в отдельный класс (или даже в пространство имен), если вы намерены использовать C++
в полной мере. Если вы просто намереваетесь сохранить реализацию в том виде, в каком она есть, вам следует изменить метку вопроса на C