defmodule SelectionSort do def sort(list), do: sort(list, []) def sort([], result), do: result def sort(list, result) do min = minimum(list) xs = delete(list, min) sort(xs, result ++ [min]) end def minimum([head|tail]), do: minimum(tail, head) def minimum([], memo), do: memo def minimum([head|tail], memo) do minimum tail, (if head < memo, do: head, else: memo) end def delete(list, item), do: delete(list, item, [], true) def delete([], _, rest, _), do: rest def delete([head|tail], item, rest, flag) do if flag && (head == item) do delete(tail, item, rest, false) else delete(tail, item, rest ++ [head], flag) end end end