From 5d965d0b8a984b0a3f99f5152af4731c92b38494 Mon Sep 17 00:00:00 2001 From: Evgeny Garlukovich Date: Mon, 5 Feb 2018 22:35:57 +0300 Subject: [PATCH] Add Elixir examples for quicksort --- 04_quicksort/elixir/01_loop_sum.exs | 1 + 04_quicksort/elixir/02_recursive_sum.exs | 6 ++++++ 04_quicksort/elixir/03_recursive_count.exs | 6 ++++++ 04_quicksort/elixir/04_recursive_max.exs | 12 ++++++++++++ 04_quicksort/elixir/05_quicksort.exs | 12 ++++++++++++ 5 files changed, 37 insertions(+) create mode 100644 04_quicksort/elixir/01_loop_sum.exs create mode 100644 04_quicksort/elixir/02_recursive_sum.exs create mode 100644 04_quicksort/elixir/03_recursive_count.exs create mode 100644 04_quicksort/elixir/04_recursive_max.exs create mode 100644 04_quicksort/elixir/05_quicksort.exs 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]))