Another update from ingydotnet^djgoku
This commit is contained in:
parent
91df62d461
commit
948b86eafa
7604 changed files with 108452 additions and 22726 deletions
|
|
@ -0,0 +1,24 @@
|
|||
defmodule Sort do
|
||||
def counting_sort([]), do: []
|
||||
def counting_sort(list) do
|
||||
{min, max} = minmax(list)
|
||||
count = List.to_tuple(for _ <- min..max, do: 0)
|
||||
counted = Enum.reduce(list, count, fn x,acc ->
|
||||
i = x - min
|
||||
put_elem(acc, i, elem(acc, i) + 1)
|
||||
end)
|
||||
Enum.reduce(max..min, [], fn n,acc ->
|
||||
m = elem(counted, n - min)
|
||||
List.duplicate(n, m) ++ acc
|
||||
end)
|
||||
end
|
||||
|
||||
defp minmax([h|t]), do: minmax(t, h, h)
|
||||
|
||||
defp minmax([], min, max), do: {min, max}
|
||||
defp minmax([h|t], min, max) when h<min, do: minmax(t, h, max)
|
||||
defp minmax([h|t], min, max) when max<h, do: minmax(t, min, h)
|
||||
defp minmax([_|t], min, max) , do: minmax(t, min, max)
|
||||
end
|
||||
|
||||
IO.inspect Sort.counting_sort([1,-2,-3,2,1,-5,5,5,4,5,9])
|
||||
Loading…
Add table
Add a link
Reference in a new issue