diff --git a/Chapter07/priorityQueueHeap.py b/Chapter07/priorityQueueHeap.py index ff47587..a053906 100644 --- a/Chapter07/priorityQueueHeap.py +++ b/Chapter07/priorityQueueHeap.py @@ -5,11 +5,12 @@ def __init__(self): def arrange(self, k): while k // 2 > 0: - if self.heap[k][0] < self.heap[k//2][0]: - self.heap[k], self.heap[k//2] = self.heap[k//2], self.heap[k] + if self.heap[k][0] >= self.heap[k // 2][0]: + break + self.heap[k], self.heap[k // 2] = self.heap[k // 2], self.heap[k] k //= 2 - def insert(self,priority, item): + def insert(self, priority, item): self.heap.append((priority, item)) self.size += 1 self.arrange(self.size) @@ -17,14 +18,15 @@ def insert(self,priority, item): def sink(self, k): while k * 2 <= self.size: mc = self.minchild(k) - if self.heap[k][0] > self.heap[mc][0]: - self.heap[k], self.heap[mc] = self.heap[mc], self.heap[k] + if self.heap[k][0] < self.heap[mc][0]: + break + self.heap[k], self.heap[mc] = self.heap[mc], self.heap[k] k = mc def minchild(self, k): if k * 2 + 1 > self.size: return k * 2 - elif self.heap[k*2][0] < self.heap[k*2+1][0]: + elif self.heap[k * 2][0] <= self.heap[k * 2 + 1][0]: return k * 2 else: return k * 2 + 1 @@ -38,10 +40,9 @@ def delete_at_root(self): return item - -h = PriorityQueueHeap() -h.insert(2, "Bat") -h.insert(13,"Cat") +h = PriorityQueueHeap() +h.insert(2, "Bat") +h.insert(13, "Cat") h.insert(18, "Rat") h.insert(26, "Ant") h.insert(3, "Lion") @@ -54,6 +55,3 @@ def delete_at_root(self): n = h.delete_at_root() print(n) print(h.heap) - - -