diff --git a/04_quicksort/elixir/01_loop_sum.exs b/04_quicksort/elixir/01_loop_sum.exs new file mode 100644 index 0000000..6b4589c --- /dev/null +++ b/04_quicksort/elixir/01_loop_sum.exs @@ -0,0 +1 @@ +# Cannot be implemented in Elixir, because Elixir has no loops :) diff --git a/04_quicksort/elixir/02_recursive_sum.exs b/04_quicksort/elixir/02_recursive_sum.exs new file mode 100644 index 0000000..020ac1e --- /dev/null +++ b/04_quicksort/elixir/02_recursive_sum.exs @@ -0,0 +1,6 @@ +defmodule Recursive do + def sum([]), do: 0 + def sum([head | tail]), do: head + sum(tail) +end + +IO.puts(Recursive.sum([1, 2, 3, 4])) diff --git a/04_quicksort/elixir/03_recursive_count.exs b/04_quicksort/elixir/03_recursive_count.exs new file mode 100644 index 0000000..a7ca13d --- /dev/null +++ b/04_quicksort/elixir/03_recursive_count.exs @@ -0,0 +1,6 @@ +defmodule Recursive do + def count([]), do: 0 + def count([_ | tail]), do: 1 + count(tail) +end + +IO.puts(Recursive.count([0, 1, 2, 3, 4, 5])) diff --git a/04_quicksort/elixir/04_recursive_max.exs b/04_quicksort/elixir/04_recursive_max.exs new file mode 100644 index 0000000..38b92e8 --- /dev/null +++ b/04_quicksort/elixir/04_recursive_max.exs @@ -0,0 +1,12 @@ +defmodule Recursive do + def max([x]), do: x + + def max([head | tail]) do + get_max(head, max(tail)) + end + + defp get_max(x, y) when x > y, do: x + defp get_max(_, y), do: y +end + +IO.puts(Recursive.max([1, 5, 10, 25, 16, 1])) diff --git a/04_quicksort/elixir/05_quicksort.exs b/04_quicksort/elixir/05_quicksort.exs new file mode 100644 index 0000000..51f8815 --- /dev/null +++ b/04_quicksort/elixir/05_quicksort.exs @@ -0,0 +1,12 @@ +defmodule Quicksort do + import Enum, only: [split_with: 2] + + def sort(list) when length(list) < 2, do: list + + def sort([pivot | tail]) do + {less, greater} = split_with(tail, &(&1 <= pivot)) + sort(less) ++ [pivot | sort(greater)] + end +end + +IO.inspect(Quicksort.sort([10, 5, 2, 3]))