#!/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)