Skip to content

Commit

Permalink
Merge pull request TheAlgorithms#72 from ankit167/Heap_Data_Structure
Browse files Browse the repository at this point in the history
Code for Heap data structure
  • Loading branch information
dynamitechetan authored Apr 5, 2017
2 parents 8fe29ff + fa1e65e commit d1ac134
Showing 1 changed file with 83 additions and 0 deletions.
83 changes: 83 additions & 0 deletions data_structures/Heap/heap.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
#!/usr/bin/python

class Heap:
def __init__(self):
self.h = []
self.currsize = 0

def leftChild(self,i):
if 2*i+1 < self.currsize:
return 2*i+1
return None

def rightChild(self,i):
if 2*i+2 < self.currsize:
return 2*i+2
return None

def maxHeapify(self,node):
if node < self.currsize:
m = node
lc = self.leftChild(node)
rc = self.rightChild(node)
if lc is not None and self.h[lc] > self.h[m]:
m = lc
if rc is not None and self.h[rc] > self.h[m]:
m = rc
if m!=node:
temp = self.h[node]
self.h[node] = self.h[m]
self.h[m] = temp
self.maxHeapify(m)

def buildHeap(self,a):
self.currsize = len(a)
self.h = list(a)
for i in range(self.currsize/2,-1,-1):
self.maxHeapify(i)

def getMax(self):
if self.currsize >= 1:
me = self.h[0]
temp = self.h[0]
self.h[0] = self.h[self.currsize-1]
self.h[self.currsize-1] = temp
self.currsize -= 1
self.maxHeapify(0)
return me
return None

def heapSort(self):
size = self.currsize
while self.currsize-1 >= 0:
temp = self.h[0]
self.h[0] = self.h[self.currsize-1]
self.h[self.currsize-1] = temp
self.currsize -= 1
self.maxHeapify(0)
self.currsize = size

def insert(self,data):
self.h.append(data)
curr = self.currsize
self.currsize+=1
while self.h[curr] > self.h[curr/2]:
temp = self.h[curr/2]
self.h[curr/2] = self.h[curr]
self.h[curr] = temp
curr = curr/2

def display(self):
print (self.h)

def main():
l = list(map(int,raw_input().split()))
h = Heap()
h.buildHeap(l)
h.heapSort()
h.display()

if __name__=='__main__':
main()


0 comments on commit d1ac134

Please sign in to comment.