Не ясно, каков вариант использования для этого, поэтому трудно сказать, что сделало бы решение жизнеспособным или лучше, чем любое другое решение.
Тем не менее, я предлагаю небольшое изменение к общим идеям "извлекать и сортировать", которые уже реализованы: Если мы хорошо вносим изменения в структуру данных, мы можем выполнить нашу сортировку на месте.
Базовая реализация, предложенная в Википедии , представляет собой частично отсортированный список изнутри.Мы можем заплатить (мы надеемся) единовременную O ( n log ( n )) стоимость сортировки нашей кучи при первом вызове next()
после чего next
равно O (1).Крайне важно, что полностью отсортированный список по-прежнему является действительной кучей .
Более того, если вы рассмотрите алгоритм heapsort , вы можете начать на втором этапе, потому что вы начинаете с правильной кучи.