From 8066ec2a000700870aae2fdcc068baaa2c35e86b Mon Sep 17 00:00:00 2001 From: Citlalli I Zarate <37793116+MiffyBruna@users.noreply.github.com> Date: Tue, 21 Jun 2022 16:56:29 -0700 Subject: [PATCH 1/2] All tests pass --- heaps/heap_sort.py | 15 +++++++++--- heaps/min_heap.py | 59 ++++++++++++++++++++++++++++++++++++---------- 2 files changed, 58 insertions(+), 16 deletions(-) diff --git a/heaps/heap_sort.py b/heaps/heap_sort.py index 3b834a5..95d0eab 100644 --- a/heaps/heap_sort.py +++ b/heaps/heap_sort.py @@ -1,8 +1,17 @@ - - +from heaps.min_heap import MinHeap def heap_sort(list): """ This method uses a heap to sort an array. Time Complexity: ? Space Complexity: ? """ - pass \ No newline at end of file + heap = MinHeap() + + for num in list: + heap.add(num) + + index = 0 + while not heap.empty(): + list[index] = heap.remove() + index += 1 + + return list diff --git a/heaps/min_heap.py b/heaps/min_heap.py index f6fe4e0..39bd867 100644 --- a/heaps/min_heap.py +++ b/heaps/min_heap.py @@ -1,3 +1,5 @@ + + class HeapNode: def __init__(self, key, value): @@ -19,18 +21,29 @@ def __init__(self): def add(self, key, value = None): """ This method adds a HeapNode instance to the heap If value == None the new node's value should be set to key - Time Complexity: ? - Space Complexity: ? + Time Complexity: O(log n) + Space Complexity: O(log n) """ - pass + if value == None: + value = key + new_node =HeapNode(key, value) + + self.store.append(new_node) + self.heap_up(len(self.store) - 1) + def remove(self): """ This method removes and returns an element from the heap maintaining the heap structure - Time Complexity: ? - Space Complexity: ? + Time Complexity: O(log n) + Space Complexity: O(log n) """ - pass + if len(self.store) ==0: + return None + self.swap(0, len(self.store) -1) + min = self.store.pop() + self.heap_down(0) + return min.value @@ -44,10 +57,10 @@ def __str__(self): def empty(self): """ This method returns true if the heap is empty - Time complexity: ? - Space complexity: ? + Time complexity: O(1) + Space complexity: O(1) """ - pass + return len(self.store) == 0 def heap_up(self, index): @@ -57,10 +70,16 @@ def heap_up(self, index): property is reestablished. This could be **very** helpful for the add method. - Time complexity: ? - Space complexity: ? + Time complexity: O(log n) + Space complexity: O(log n) """ - pass + if index == 0: + return + + parent = (index -1) // 2 + if self.store[parent].key > self.store[index].key: + self.swap(index, parent) + self.heap_up(parent) def heap_down(self, index): """ This helper method takes an index and @@ -68,7 +87,21 @@ def heap_down(self, index): larger than either of its children and continues until the heap property is reestablished. """ - pass + left_child = index * 2 + 1 + right_child = index * 2 + 2 + + if left_child < len(self.store): + if right_child < len(self.store): + if self.store[left_child].key < self.store[right_child].key: + child = left_child + else: + child = right_child + else: + child = left_child + + if self.store[child].key < self.store[index].key: + self.swap(child, index) + self.heap_down(child) def swap(self, index_1, index_2): From aacfbc650408c50a68331925454fa1ecd6900b3d Mon Sep 17 00:00:00 2001 From: Citlalli I Zarate <37793116+MiffyBruna@users.noreply.github.com> Date: Tue, 21 Jun 2022 17:02:04 -0700 Subject: [PATCH 2/2] Added complexity to heap_sort --- heaps/heap_sort.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/heaps/heap_sort.py b/heaps/heap_sort.py index 95d0eab..83f2966 100644 --- a/heaps/heap_sort.py +++ b/heaps/heap_sort.py @@ -1,8 +1,8 @@ from heaps.min_heap import MinHeap def heap_sort(list): """ This method uses a heap to sort an array. - Time Complexity: ? - Space Complexity: ? + Time Complexity: O(n logn) + Space Complexity: O(n) """ heap = MinHeap()