Skip to content

Instantly share code, notes, and snippets.

@sanuj
Last active July 27, 2017 19:44
Show Gist options
  • Save sanuj/41245ba6ff099f0366b26064477ea09a to your computer and use it in GitHub Desktop.
Save sanuj/41245ba6ff099f0366b26064477ea09a to your computer and use it in GitHub Desktop.
Simple heap implementation in Python
class Heap:
def __init__(self, arr):
self.arr = arr
self.size = len(arr)
self.init()
def l(self, i):
return 2*i+1
def r(self, i):
return 2*i+2
def p(self, i):
return (i-1)/2
def init(self):
for i in range(self.size/2, -1, -1):
self.heapify(i)
def heapify(self, p):
if p >= self.size:
return
left, right = self.l(p), self.r(p)
if left >= self.size:
return
if self.arr[p] < self.arr[left] and right >= self.size:
self.arr[p], self.arr[left] = self.arr[left], self.arr[p]
return
if right >= self.size:
return
largest = max(self.arr[p], self.arr[left], self.arr[right])
if largest != self.arr[p]:
if largest == self.arr[left]:
self.arr[p], self.arr[left] = self.arr[left], self.arr[p]
self.heapify(left)
else:
self.arr[p], self.arr[right] = self.arr[right], self.arr[p]
self.heapify(right)
def insert(self, v):
if self.size == len(self.arr):
self.arr.append(v)
self.size += 1
else:
self.arr[self.size] = v
self.size += 1
i = self.size-1
while i > 0 and self.arr[i] > self.arr[self.p(i)]:
self.arr[i], self.arr[self.p(i)] = self.arr[self.p(i)], self.arr[i]
i = self.p(i)
def pop(self):
m = self.arr[0]
self.arr[0] = self.arr[self.size-1]
self.size -= 1
self.heapify(0)
return m
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment