По умолчанию heapq - это реализация очереди min и интересно, есть ли опция для максимальной очереди? Спасибо.
Я попробовал решение с помощью _heapify_max для максимальной кучи, но как обрабатывать динамический элемент push/pop? Кажется, что _heapify_max можно использовать только во время инициализации.
import heapq
def heapsort(iterable):
h = []
for value in iterable:
heapq.heappush(h, value)
return [heapq.heappop(h) for i in range(len(h))]
if __name__ == "__main__":
print heapsort([1, 3, 5, 7, 9, 2, 4, 6, 8, 0])
Изменить, попробовал _heapify_max, похоже, не работает для динамических кнопок push/pop. Я попробовал оба метода вывода одинаково, оба выхода - [0, 1, 2, 3, 4, 5, 6, 7, 8, 9].
def heapsort(iterable):
h = []
for value in iterable:
heapq.heappush(h, value)
return [heapq.heappop(h) for i in range(len(h))]
def heapsort2(iterable):
h = []
heapq._heapify_max(h)
for value in iterable:
heapq.heappush(h, value)
return [heapq.heappop(h) for i in range(len(h))]
if __name__ == "__main__":
print heapsort([1, 3, 5, 7, 9, 2, 4, 6, 8, 0])
print heapsort2([1, 3, 5, 7, 9, 2, 4, 6, 8, 0])
Спасибо заранее, Lin