Skip to content

Commit e15c0aa

Browse files
author
Ankit Agarwal
committed
Contributing code for Heap data structure, and
all basic operations associated with it.
1 parent 8fe29ff commit e15c0aa

File tree

1 file changed

+84
-0
lines changed

1 file changed

+84
-0
lines changed

data_structures/Heap/heap.py

+84
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
#!/usr/bin/python
2+
3+
class Heap:
4+
def __init__(self):
5+
self.h = []
6+
self.currsize = 0
7+
8+
def leftChild(self,i):
9+
if 2*i+1 < self.currsize:
10+
return 2*i+1
11+
return None
12+
13+
def rightChild(self,i):
14+
if 2*i+2 < self.currsize:
15+
return 2*i+2
16+
return None
17+
18+
def maxHeapify(self,node):
19+
if node < self.currsize:
20+
m = node
21+
lc = self.leftChild(node)
22+
rc = self.rightChild(node)
23+
if lc is not None and self.h[lc] > self.h[m]:
24+
m = lc
25+
if rc is not None and self.h[rc] > self.h[m]:
26+
m = rc
27+
if m!=node:
28+
temp = self.h[node]
29+
self.h[node] = self.h[m]
30+
self.h[m] = temp
31+
self.maxHeapify(m)
32+
33+
def buildHeap(self,a):
34+
self.currsize = len(a)
35+
self.h = list(a)
36+
for i in range(self.currsize/2,-1,-1):
37+
self.maxHeapify(i)
38+
39+
def getMax(self):
40+
if self.currsize >= 1:
41+
me = self.h[0]
42+
temp = self.h[0]
43+
self.h[0] = self.h[self.currsize-1]
44+
self.h[self.currsize-1] = temp
45+
self.currsize -= 1
46+
self.maxHeapify(0)
47+
return me
48+
return None
49+
50+
def heapSort(self):
51+
size = self.currsize
52+
while self.currsize-1 >= 0:
53+
temp = self.h[0]
54+
self.h[0] = self.h[self.currsize-1]
55+
self.h[self.currsize-1] = temp
56+
self.currsize -= 1
57+
self.maxHeapify(0)
58+
self.currsize = size
59+
60+
def insert(self,data):
61+
self.h.append(data)
62+
curr = self.currsize
63+
self.currsize+=1
64+
while self.h[curr] > self.h[curr/2]:
65+
temp = self.h[curr/2]
66+
self.h[curr/2] = self.h[curr]
67+
self.h[curr] = temp
68+
curr = curr/2
69+
70+
def display(self):
71+
for item in self.h:
72+
print item,
73+
74+
def main():
75+
l = list(map(int,raw_input().split()))
76+
h = Heap()
77+
h.buildHeap(l)
78+
h.heapSort()
79+
h.display()
80+
81+
if __name__=='__main__':
82+
main()
83+
84+

0 commit comments

Comments
 (0)