Erlang Quick Sort Tutorial para ordenar lista de forma crescente ou decrescente utilizando Erlang.
1. Problema: ordenar lista ordenar(lista) => lista ordenada
ordenar ([4, 3, 9, 3, 7, 4, 2]) => [2, 3, 3, 4, 4, 7, 9]
2. Rodar exemplos
  • ordenar ([4, 3, 9, 3, 7, 4, 2]).
  • ordenar([1,2,a,3,4,b,5,6].
  • ordenar([]).
  • outros 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:
    • elementos menores que o primeiro:
      ordenar [ 3, 3, 2] => [2, 3, 3]
    • restante dos elementos:
      ordenar [9, 7, 4] => [4, 7, 9]
  3. Concatenar listas:
    [2, 3, 3] ++ [4] ++ [4, 7, 9] => [2, 3, 3, 4, 4, 7, 9]
4. Função para ordenar
ordenar([Primeiro|Resto]) ->
ordenar([X|| X <- Resto, X < Primeiro]) ++
[Primeiro] ++
ordenar([X|| X <- Resto, X >= Primeiro]);
ordenar([]) -> [].
5. Componentes usados
6. Componentes usados - Lista ... ordenar([4, 3, 9, 3, 7, 4, 2]) -> ..
ErlangListaSimples.png
7. Componentes usados - Lista com resto ... ordenar([Primeiro|Resto]) -> ...
... ordenar([4 | 3, 9, 3, 7, 4, 2]) -> ...
Primeiro = 4
Resto = [3, 9, 3, 7, 4, 2]
ErlangListaCompleta.png
8. Componentes usados - List Comprehension [X|| X <- Resto, X < Primeiro]
A lista de X tal que X pertence a Resto e X é menor que Primeiro.

[X|| X <- [3, 9, 3, 7, 4, 2], X < 4]
The list of X such that X is taken from the list [3,9,3,7,4,2]and X is less than 4.
ErlangListComprehension.png
9. Função completa para ordenar
  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

-module(quicksort).
-export([ordenar/1]).

ordenar([Primeiro|Resto]) ->
ordenar([X|| X <- Resto, X < Primeiro]) ++
[Primeiro] ++
ordenar([X|| X <- Resto, X >= Primeiro]);
ordenar([]) -> [].
10. Fazer função ordenar lista de forma crescente ou decrescente
ordenar(tipo da ordenação, lista) => lista ordenada
tipo da ordenação:
  • c = crescente
  • d = decrescente
11. Avaliar solução
-module(quicksort2).
-export([ordenar/1, ordenar/2]).

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

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]);
ordenar(_,[]) -> [].
12. Retrospectiva :) :( 
Arquivo origem: ErlangQuickSort.xml.
Erlang Quick Sort {12} Problema: ordenar lista Rodar exemplos Idéia da solução: usar quick sort Função para ordenar Componentes usados Componentes usados - Lista Componentes usados - Lista com resto Componentes usados - List Comprehension Função completa para ordenar Fazer função Avaliar solução Retrospectiva :) :( 
Índice Local {9}
Projeto Apoie {6} Projeto Apoie Projeto PAS Serviço Web Relacionamentos entre Personagens
Base de Conhecimento {5} Conhecimento Dado Informação consolidada Página Pronta - site apoie.org Pulo do Gato
Contato Projeto Apoie
Linguagem {5}
Javascript {3} Referências e Ferramentas Sintaxe Cheat Sheet
Erlang Quick Sort
LDC {2} LDC LDC - Sintaxe
Definição {9} Erlang Python 3.0 Ruby 1.9.1 - Sintaxe Ruby 1.9.1 - Léxico Shell Lua PHP XML Lazy BNF
If
Dojo {4} Coding Dojo Coding Dojo - Formatos
Soluções Coding Dojo {6} Dojo #34: Expressão Aritmética Dojo #33: Impedimento Dojo #32: Sequência Numérica Dojo #31: Tráfego Dojo #29: Boliche Dojo #28: Jogo da Vida
Dojo Rio
Qualidade {2}
5W {3} 5W2H 5W1H 5W2H - 5W1H - Modelo
PDCA
Componente {5} Componente ExibirLinguagem.htm Gerar Páginas Lista Tabela de Decisões
Paletas {10} Paleta - Mais utilizadas Paleta - Apoie Paleta - Apresentação e Componentes Paleta - Diagramas Paleta - Diagrama Sintático Paleta - Dojo Paleta - Logos Paleta - Projetos Paleta - Setas Paleta - Tecnologia
Evento {4} Pendência Estados de Componentes Scrum Prioridade
Método {5} Oficina Serviço Web Warnier/Orr Basics Apresentar Problema Resolvido Simples x Complexo
Imposto de Renda