diff --git a/lib/heap_sort.rb b/lib/heap_sort.rb index c8a32a4..596e3ef 100644 --- a/lib/heap_sort.rb +++ b/lib/heap_sort.rb @@ -4,5 +4,16 @@ # Time Complexity: ? # Space Complexity: ? def heap_sort(list) - raise NotImplementedError, "Method not implemented yet..." + heap = MinHeap.new + + list.each do |i| + heap.add(i) + end + + sorted_array = [] + + until heap.empty? + sorted_array << heap.remove + end + return sorted_array end \ No newline at end of file diff --git a/lib/min_heap.rb b/lib/min_heap.rb index 6eaa630..7624f38 100644 --- a/lib/min_heap.rb +++ b/lib/min_heap.rb @@ -17,7 +17,8 @@ def initialize # Time Complexity: ? # Space Complexity: ? def add(key, value = key) - raise NotImplementedError, "Method not implemented yet..." + @store << HeapNode.new(key, value) + return heap_up(@store.length - 1) end # This method removes and returns an element from the heap @@ -25,7 +26,15 @@ def add(key, value = key) # Time Complexity: ? # Space Complexity: ? def remove() - raise NotImplementedError, "Method not implemented yet..." + return nil if @store.empty? + + + removed = @store[0] + swap(0, @store.length - 1) + @store = @store[0...-1] + + heap_down(0) + return removed.value end @@ -47,7 +56,7 @@ def to_s # Time complexity: ? # Space complexity: ? def empty? - raise NotImplementedError, "Method not implemented yet..." + return @store.length == 0 end private @@ -58,7 +67,12 @@ def empty? # Time complexity: ? # Space complexity: ? def heap_up(index) - + return nil if index == 0 + parent = (index -1 ) / 2 + if @store[index].key < @store[parent].key + swap(index, parent) + heap_up(parent) + end end # This helper method takes an index and