defbuild(heap):
size = len(heap)
for i in range((size - 2) // 2, -1, -1):
heapify(heap, size, i)
defheapify(heap, size, root):
left = root * 2 + 1
right = left + 1
larger = root
if left < size and heap[larger] < heap[left]:
larger = left
if right < size and heap[larger] < heap[right]:
larger = right
if larger != root:
heap[larger], heap[root] = heap[root], heap[larger]
heapify(heap, size, larger)
defsort(heap):
build(heap)
for i in range(len(heap) - 1, -1, -1):
heap[i], heap[0] = heap[0], heap[i]
heapify(heap, i, 0)
h = [6, 4, 1, 8, 9]
sort(h)
print(h)
小顶堆,降序排序
defbuild(heap):
size = len(heap)
for i in range((size - 2) // 2, -1, -1):
heapify(heap, size, i)
defheapify(heap, size, root):
left = root * 2 + 1
right = left + 1
smaller = root
if left < size and heap[smaller] > heap[left]:
smaller = left
if right < size and heap[smaller] > heap[right]:
smaller = right
if smaller != root:
heap[smaller], heap[root] = heap[root], heap[smaller]
heapify(heap, size, smaller)
defsort(heap):
build(heap)
for i in range(len(heap) - 1, -1, -1):
heap[i], heap[0] = heap[0], heap[i]
heapify(heap, i, 0)
h = [6, 4, 1, 8, 9]
sort(h)
print(h)