11def heapsort (arr ):
2- pass
2+ pass
33
44class Heap :
55 def __init__ (self ):
6- self .storage = [0 ]
7- self .size = 0
8-
6+ self .storage = []
7+
98 def insert (self , value ):
109 self .storage .append (value )
11- self .size += 1
12- self ._bubble_up (self .size )
10+ self ._bubble_up (len (self .storage ) - 1 )
1311
1412 def delete (self ):
15- retval = self .storage [1 ]
16- self .storage [1 ] = self .storage [self .size ]
17- self .size -= 1
13+ retval = self .storage [0 ]
14+ self .storage [0 ] = self .storage [len (self .storage ) - 1 ]
1815 self .storage .pop ()
19- self ._sift_down (1 )
16+ self ._sift_down (0 )
2017 return retval
2118
2219 def get_max (self ):
23- return self .storage [1 ]
20+ return self .storage [0 ]
2421
2522 def get_size (self ):
26- return self .size
23+ return len ( self .storage )
2724
2825 def _bubble_up (self , index ):
29- while index // 2 > 0 :
30- if self .storage [index // 2 ] < self .storage [index ]:
31- self .storage [index ], self .storage [index // 2 ] = self .storage [index // 2 ], self .storage [index ]
32- index = index // 2
26+ while ( index - 1 ) // 2 >= 0 :
27+ if self .storage [( index - 1 ) // 2 ] < self .storage [index ]:
28+ self .storage [index ], self .storage [( index - 1 ) // 2 ] = self .storage [( index - 1 ) // 2 ], self .storage [index ]
29+ index = ( index - 1 ) // 2
3330
3431 def _sift_down (self , index ):
35- while ( index * 2 ) <= self .size :
32+ while index * 2 + 1 <= len ( self .storage ) - 1 :
3633 mc = self ._max_child (index )
3734 if self .storage [index ] < self .storage [mc ]:
3835 self .storage [index ], self .storage [mc ] = self .storage [mc ], self .storage [index ]
3936 index = mc
4037
4138 def _max_child (self , index ):
42- if index * 2 + 1 > self .size :
43- return index * 2
39+ if index * 2 + 2 > len ( self .storage ) - 1 :
40+ return index * 2 + 1
4441 else :
45- return index * 2 if self .storage [index * 2 ] > self .storage [index * 2 + 1 ] else index * 2 + 1
42+ return index * 2 + 1 if self .storage [index * 2 + 1 ] > self .storage [index * 2 + 2 ] else index * 2 + 2
0 commit comments