クイックソート

#!/usr/bin/env elixir
defmodule QuickSort do
  def quick_sort([]) do
    []
  end

  def quick_sort([pivot|rest]) do
    {smaller, larger} = partition(pivot, rest, [], [])
    quick_sort(smaller) ++ [pivot] ++ quick_sort(larger)
  end

  defp partition(_, [], smaller, larger) do
    {smaller, larger}
  end

  defp partition(pivot, [h|t], smaller, larger) do
    if h <= pivot do
      partition(pivot, t, [h|smaller], larger)
    else
      partition(pivot, t, smaller, [h|larger])
    end
  end
end

list = [101, 108, 104, 106, 102, 109, 103, 105, 110, 100, 107]
IO.inspect(QuickSort.quick_sort(list), char_lists: :as_lists)