Sorting algorithms/Heapsort: Difference between revisions

Added Elixir
(Added Elixir)
Line 830:
 
</lang>
 
=={{header|E}}==
{{trans|Python}}
Line 888 ⟶ 889:
 
</lang>
 
 
=={{header|Eiffel}}==
Line 1,015:
Unsorted: 5 91 13 99 7 35
Sorted: 5 7 13 35 91 99
</pre>
 
=={{header|Elixir}}==
<lang elixir>defmodule Sort do
def heapSort(list) do
len = length(list)
heapify(List.to_tuple(list), div(len - 2, 2))
|> heapSort(len-1)
|> Tuple.to_list
end
defp heapSort(a, finish) when finish > 0 do
swap(a, 0, finish)
|> siftDown(0, finish-1)
|> heapSort(finish-1)
end
defp heapSort(a, _), do: a
defp heapify(a, start) when start >= 0 do
siftDown(a, start, tuple_size(a)-1)
|> heapify(start-1)
end
defp heapify(a, _), do: a
defp siftDown(a, root, finish) when root * 2 + 1 <= finish do
child = root * 2 + 1
if child + 1 <= finish and elem(a,child) < elem(a,child + 1), do: child = child + 1
if elem(a,root) < elem(a,child),
do: swap(a, root, child) |> siftDown(child, finish),
else: a
end
defp siftDown(a, _root, _finish), do: a
defp swap(a, i, j) do
{vi, vj} = {elem(a,i), elem(a,j)}
a |> put_elem(i, vj) |> put_elem(j, vi)
end
end
 
(for _ <- 1..20, do: :rand.uniform(20)) |> IO.inspect |> Sort.heapSort |> IO.inspect</lang>
 
{{out}}
<pre>
[6, 1, 12, 3, 7, 7, 9, 20, 8, 15, 2, 10, 14, 5, 19, 7, 20, 9, 14, 19]
[1, 2, 3, 5, 6, 7, 7, 7, 8, 9, 9, 10, 12, 14, 14, 15, 19, 19, 20, 20]
</pre>
 
Line 1,757 ⟶ 1,802:
wend
End Sub
 
 
 
 
</lang>
 
Line 2,553 ⟶ 2,594:
element 25 after sort zeta
</pre>
 
=={{header|PowerShell}}==
<lang PowerShell>
Line 3,090 ⟶ 3,132:
}
}
 
func heapify(a, count) {
var start = ((count - 2) / 2);
Line 3,098 ⟶ 3,140:
}
}
 
func heap_sort(a, count) {
heapify(a, count);
Line 3,177 ⟶ 3,219:
end;
</lang>
 
=={{header|Swift}}==
<lang Swift>func heapsort<T:Comparable>(inout list:[T]) {
Anonymous user