diff --git a/Chapter07/heap.py b/Chapter07/heap.py index ee0aa33..c948f6c 100644 --- a/Chapter07/heap.py +++ b/Chapter07/heap.py @@ -5,8 +5,9 @@ def __init__(self): def arrange(self, k): while k // 2 > 0: - if self.heap[k] < self.heap[k//2]: - self.heap[k], self.heap[k//2] = self.heap[k//2], self.heap[k] + if self.heap[k] > self.heap[k//2]: + break + self.heap[k], self.heap[k//2] = self.heap[k//2], self.heap[k] k //= 2 def insert(self, item): @@ -17,8 +18,9 @@ def insert(self, item): def sink(self, k): while k * 2 <= self.size: mc = self.minchild(k) - if self.heap[k] > self.heap[mc]: - self.heap[k], self.heap[mc] = self.heap[mc], self.heap[k] + if self.heap[k] < self.heap[mc]: + break + self.heap[k], self.heap[mc] = self.heap[mc], self.heap[k] k = mc def minchild(self, k): @@ -43,6 +45,7 @@ def delete_at_location(self, location): self.heap[location] = self.heap[self.size] self.size -= 1 self.heap.pop() + self.arrange(location) self.sink(location) return item