Skip to content

Instantly share code, notes, and snippets.

@DanielNill
Last active June 5, 2019 22:51
Show Gist options
  • Select an option

  • Save DanielNill/1b403cdcad315f5fe957594606476f73 to your computer and use it in GitHub Desktop.

Select an option

Save DanielNill/1b403cdcad315f5fe957594606476f73 to your computer and use it in GitHub Desktop.
class MaxHeap(object):
arr = []
def parent(self, i):
return (i - 1)//2
def insert(self, v):
self.arr.append(v)
i = len(self.arr) - 1
while i != 0 and self.arr[self.parent(i)] < self.arr[i]:
self.arr[i], self.arr[self.parent(i)] = (self.arr[self.parent(i)], self.arr[i])
i = self.parent(i)
def delete(self, i):
self.arr[i] = float("inf")
while i != 0 and self.arr[self.parent(i)] < self.arr[i]:
self.arr[i], self.arr[self.parent(i)] = (self.arr[self.parent(i)], self.arr[i])
i = self.parent(i)
self.arr[0] = self.arr.pop(-1)
self.heapify(0)
def heapify(self, i):
left = i * 2 + 1
right = i * 2 + 2
largest = i
if left < len(self.arr) - 1 and self.arr[left] > self.arr[largest]:
largest = left
if right < len(self.arr) - 1 and self.arr[right] > self.arr[largest]:
largest = right
if largest != i:
self.arr[i], self.arr[largest] = (self.arr[largest], self.arr[i])
self.heapify(largest)
h = MaxHeap()
h.insert(1)
print(h.arr)
h.insert(2)
print(h.arr)
h.insert(3)
print(h.arr)
h.insert(4)
print(h.arr)
h.insert(5)
print(h.arr)
h.insert(6)
print(h.arr)
h.insert(7)
print(h.arr)
h.insert(8)
print(h.arr)
h.insert(9)
print(h.arr)
h.delete(0)
print(h.arr)
h.delete(2)
print(h.arr)
h.delete(4)
print(h.arr)
h.delete(5)
print(h.arr)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment