File tree 1 file changed +83
-0
lines changed
1 file changed +83
-0
lines changed Original file line number Diff line number Diff line change
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
+ print (self .h )
72
+
73
+ def main ():
74
+ l = list (map (int ,raw_input ().split ()))
75
+ h = Heap ()
76
+ h .buildHeap (l )
77
+ h .heapSort ()
78
+ h .display ()
79
+
80
+ if __name__ == '__main__' :
81
+ main ()
82
+
83
+
You can’t perform that action at this time.
0 commit comments