heap = [x for x in range(5)]
heap = [4, 1, 3, 2, 16, 9, 10, 14, 8, 7]
def heap_sort(heap):
heapSize = len(heap)
def get_parent(index):
return (index-1)//2
def get_left_child(index):
return 2*index + 1
def get_right_child(index):
return 2*index + 2
def max_heapify(index):
l = get_left_child(index)
r = get_right_child(index)
if l < heapSize and heap[l] > heap[index]:
largest = l
else:
largest = index
if r < heapSize and heap[r] > heap[largest]:
largest = r
if largest != index:
heap[index], heap[largest] = heap[largest], heap[index]
max_heapify(largest)
def build_max_heap():
heapSize = len(heap)
for i in range(len(heap)//2, -1, -1):
max_heapify(i)
build_max_heap()
j = 0
for i in range(len(heap)-1, 0, -1):
heap[0], heap[i] = heap[i], heap[0]
heapSize -= 1
j += 1
max_heapify(0)
print(heap)
heap_sort(heap[:])
print(heap)
aGVhcCA9IFt4IGZvciB4IGluIHJhbmdlKDUpXQpoZWFwID0gWzQsIDEsIDMsIDIsIDE2LCA5LCAxMCwgMTQsIDgsIDddCgoKZGVmIGhlYXBfc29ydChoZWFwKToKICAgIAogICAgaGVhcFNpemUgPSBsZW4oaGVhcCkKCiAgICBkZWYgZ2V0X3BhcmVudChpbmRleCk6CiAgICAgICAgcmV0dXJuIChpbmRleC0xKS8vMgoKICAgIGRlZiBnZXRfbGVmdF9jaGlsZChpbmRleCk6CiAgICAgICAgcmV0dXJuIDIqaW5kZXggKyAxCgoKICAgIGRlZiBnZXRfcmlnaHRfY2hpbGQoaW5kZXgpOgogICAgICAgIHJldHVybiAyKmluZGV4ICsgMgoKICAgIGRlZiBtYXhfaGVhcGlmeShpbmRleCk6CiAgICAgICAgbCA9IGdldF9sZWZ0X2NoaWxkKGluZGV4KQogICAgICAgIHIgPSBnZXRfcmlnaHRfY2hpbGQoaW5kZXgpCgogICAgICAgIGlmIGwgPCBoZWFwU2l6ZSBhbmQgaGVhcFtsXSA+IGhlYXBbaW5kZXhdOgogICAgICAgICAgICBsYXJnZXN0ID0gbAogICAgICAgIGVsc2U6CiAgICAgICAgICAgIGxhcmdlc3QgPSBpbmRleAoKICAgICAgICBpZiByIDwgaGVhcFNpemUgYW5kIGhlYXBbcl0gPiBoZWFwW2xhcmdlc3RdOgogICAgICAgICAgICBsYXJnZXN0ID0gcgoKICAgICAgICBpZiBsYXJnZXN0ICE9IGluZGV4OgogICAgICAgICAgICBoZWFwW2luZGV4XSwgaGVhcFtsYXJnZXN0XSA9IGhlYXBbbGFyZ2VzdF0sIGhlYXBbaW5kZXhdCiAgICAgICAgICAgIG1heF9oZWFwaWZ5KGxhcmdlc3QpCgogICAgZGVmIGJ1aWxkX21heF9oZWFwKCk6CiAgICAgICAgaGVhcFNpemUgPSBsZW4oaGVhcCkKICAgICAgICBmb3IgaSBpbiByYW5nZShsZW4oaGVhcCkvLzIsIC0xLCAtMSk6CiAgICAgICAgICAgIG1heF9oZWFwaWZ5KGkpCgogICAgYnVpbGRfbWF4X2hlYXAoKQogICAgaiA9IDAKICAgIGZvciBpIGluIHJhbmdlKGxlbihoZWFwKS0xLCAwLCAtMSk6CiAgICAgICAgaGVhcFswXSwgaGVhcFtpXSA9IGhlYXBbaV0sIGhlYXBbMF0KICAgICAgICBoZWFwU2l6ZSAtPSAxCiAgICAgICAgaiArPSAxCiAgICAgICAgbWF4X2hlYXBpZnkoMCkKCnByaW50KGhlYXApCmhlYXBfc29ydChoZWFwWzpdKQpwcmludChoZWFwKQ==
[4, 1, 3, 2, 16, 9, 10, 14, 8, 7]
[4, 1, 3, 2, 16, 9, 10, 14, 8, 7]