mirror of
https://github.com/TheAlgorithms/Ruby
synced 2025-01-28 19:58:20 +01:00
commit
8d2850be24
1 changed files with 34 additions and 0 deletions
34
heap_sort.rb
Normal file
34
heap_sort.rb
Normal file
|
@ -0,0 +1,34 @@
|
|||
"""
|
||||
Algorithm: Heap-Sort
|
||||
Time-Complexity: O(nlogn)
|
||||
"""
|
||||
def heap_sort(array)
|
||||
array_size = array.size
|
||||
adjusted_array = [nil] + array
|
||||
(array_size / 2).downto(1) do |i|
|
||||
adjusted_down(adjusted_array, i, array_size)
|
||||
end
|
||||
while array_size > 1
|
||||
adjusted_array[1], adjusted_array[array_size] = adjusted_array[array_size], adjusted_array[1]
|
||||
array_size -= 1
|
||||
adjusted_down(adjusted_array, 1, array_size)
|
||||
end
|
||||
adjusted_array.drop(1)
|
||||
end
|
||||
|
||||
#Method to adjust heap in downward manner
|
||||
def adjusted_down(adjusted_array, parent, limit)
|
||||
top = adjusted_array[parent]
|
||||
while (child = 2 * parent) <= limit
|
||||
child += 1 if child < limit and adjusted_array[child] < adjusted_array[child + 1]
|
||||
break if top >= adjusted_array[child]
|
||||
adjusted_array[parent] = adjusted_array[child]
|
||||
parent = child
|
||||
end
|
||||
adjusted_array[parent] = top
|
||||
end
|
||||
|
||||
|
||||
#Code for testing heapsort
|
||||
array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15].shuffle
|
||||
print heap_sort(array)
|
Loading…
Add table
Reference in a new issue