Skip to content

Commit 2ecf10d

Browse files
committed
Update heap implementation
1 parent 6da8a37 commit 2ecf10d

File tree

1 file changed

+17
-20
lines changed

1 file changed

+17
-20
lines changed

data_structures/ex_2/heap.py

Lines changed: 17 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,45 +1,42 @@
11
def heapsort(arr):
2-
pass
2+
pass
33

44
class 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

Comments
 (0)