Packages
inplace
0.2.3
0.7.12
0.7.11
0.7.10
0.7.9
0.7.8
0.7.7
0.7.6
0.7.5
0.7.4
0.7.3
0.7.2
0.7.1
0.7.0
0.6.8
0.6.7
0.6.6
0.6.5
0.6.4
0.6.3
0.6.2
0.6.1
0.6.0
0.5.4
0.5.3
0.5.2
0.5.1
0.5.0
0.4.4
0.4.3
0.4.2
0.4.1
0.4.0
0.3.3
0.3.2
0.3.1
0.3.0
0.2.3
0.2.2
0.2.1
0.2.0
0.1.9
0.1.8
0.1.7
0.1.6
0.1.5
0.1.4
0.1.3
0.1.2
0.1.1
0.1.0
Mutable data structures
Current section
Files
Jump to
Current section
Files
lib/algorithms/heapsort.ex
defmodule InPlace.HeapSort do
alias InPlace.Heap
def sort(list, order \\ :asc) do
size = length(list)
sign = (order == :desc && 1) || -1
heap = Heap.new(size)
Enum.each(list, fn el -> Heap.insert(heap, sign * el) end)
extract_all(heap, size, sign)
end
defp extract_all(heap, size, sign) do
extract_next(heap, size, [], sign)
end
defp extract_next(_heap, 0, acc, _sign) do
acc
end
defp extract_next(heap, size, acc, sign) do
extract_next(heap, size - 1, [sign * Heap.extract_min(heap) | acc], sign)
end
end