Erlang
  1. Problema: ordenar lista
    ordenar(lista) => lista ordenada
    ex: ordenar ([4, 3, 9, 3, 7, 4, 2]) => [2, 3, 3, 4, 4, 7, 9]

  2. rodar exemplos
  3. Idéia da solução: usar quick sort
    ordenar(lista) => lista ordenada
    1. pegar primeiro elemento da lista: 4
    2. criar 2 listas e ordená-las:
    3. Concatenar listas:
      [2, 3, 3] ++ [4] ++ [4, 7, 9] => [2, 3, 3, 4, 4, 7, 9]
  4. Função para ordenar:
    ordenar([]) -> [];
    ordenar([Primeiro|Resto]) ->
        ordenar([X|| X <- Resto, X < Primeiro]) ++ [Primeiro] ++ ordenar([X|| X <- Resto, X >= Primeiro]).
  5. Componentes usados
  6. Função completa para ordenar:
    -module(quicksort).
    -export([ordenar/1]).

    ordenar([]) -> [];
    ordenar([Primeiro|Resto]) ->
        ordenar([X|| X <- Resto, X < Primeiro]) ++ 
    [Primeiro] ++ 

    ordenar
    ([X|| X <- Resto, X >= Primeiro]).
    1. "-module(quicksort).": nome do arquivo = quicksort.erl
    2. "-export([ordenar/1]).":
      lista de "função/quantidade de parâmetros" 
      funções visíveis externamente
  7. Fazer função:
    ordenar lista de forma crescente ou decrescente
    ordenar(tipo da ordenação, lista) => lista ordenada
    tipo da ordenação:
  8. Avaliar solução
    -module(quicksort2).
    -export([ordenar/1, ordenar/2]).

    ordenar(Lista) -> ordenar(c,Lista).

    ordenar(_,[]) -> [];
    ordenar(c,[Primeiro|Resto]) -> ordenar(c,[X||X <- Resto, X < Primeiro]) ++ [Primeiro] ++ ordenar(c,[X||X <- Resto, X >= Primeiro]);

    ordenar(d,[Primeiro|Resto]) -> ordenar(d,[X||X <- Resto, X > Primeiro]) ++ [Primeiro] ++ ordenar(d,[X||X <- Resto, X =< Primeiro]).
  9. Retrospectiva :) :(