<?xml version="1.0" encoding="UTF-8"?>
<linguagem>
<topico>
<nome>Erlang Quick Sort</nome>
<titulo>Erlang Quick Sort</titulo>
<descritor>apoie, apoie.org, componente, Erlang, linguagem, lista, função, programação, desenvolvimento</descritor>
<lead>Tutorial para ordenar lista de forma crescente ou decrescente utilizando Erlang.</lead>
<origem>ErlangQuickSort.xml</origem>
</topico>
<topico>
<titulo>Problema: ordenar lista</titulo>
<desc> ordenar(lista) =&amp;gt; lista ordenada&lt;br&gt;
ordenar ([4, 3, 9, 3, 7, 4, 2]) =&amp;gt; [2, 3, 3, 4, 4, 7, 9]
</desc>
</topico>
<topico>
<titulo>Rodar exemplos</titulo>
<desc>
&lt;ul&gt;
  &lt;li&gt;&lt;span class="exemplo"&gt;ordenar
([4, 3, 9, 3, 7, 4, 2]).&lt;/span&gt;&lt;/li&gt;
  &lt;li&gt;&lt;span class="exemplo"&gt;ordenar([1,2,a,3,4,b,5,6].&lt;/span&gt;&lt;/li&gt;
  &lt;li&gt;&lt;span class="exemplo"&gt;ordenar([]).&lt;/span&gt;&lt;/li&gt;
  &lt;li&gt;outros exemplos&lt;br&gt;
  &lt;/li&gt;
&lt;/ul&gt;
</desc>
</topico>
<topico>
<titulo>Idéia da solução:
usar quick sort</titulo>
<desc> ordenar(lista)
=&amp;gt; lista ordenada
&lt;ol&gt;
  &lt;li&gt;pegar primeiro elemento da lista: 4&lt;/li&gt;
  &lt;li&gt;criar 2 listas e ordená-las:&lt;/li&gt;
  &lt;ul&gt;
    &lt;li&gt;elementos menores que o primeiro: &lt;br&gt;
ordenar [ 3, 3, 2] =&amp;gt; [2, 3, 3]&lt;/li&gt;
    &lt;li&gt;restante dos elementos: &lt;br&gt;
ordenar [9, 7, 4] =&amp;gt; [4, 7, 9]&lt;/li&gt;
  &lt;/ul&gt;
  &lt;li&gt;Concatenar listas:&lt;br&gt;
[2, 3, 3] ++ [4] ++ [4, 7, 9] =&amp;gt; [2, 3, 3, 4, 4, 7, 9]&lt;br&gt;
  &lt;/li&gt;
&lt;/ol&gt;
</desc>
</topico>
<topico>
<titulo>Função para ordenar</titulo>
<exemplo>
ordenar([Primeiro|Resto])
-&amp;gt;&lt;br&gt;
&lt;div style=&quot;margin-left: 40px;&quot;&gt;ordenar([X|| X
&amp;lt;- Resto, X
&amp;lt; Primeiro]) ++ &lt;br&gt;
[Primeiro] ++&lt;br&gt;
ordenar([X||
X &amp;lt;-
Resto, X &amp;gt;= Primeiro]); &lt;/div&gt;
ordenar([]) -&amp;gt;
[].
</exemplo>
<des>&lt;br&gt;
</des>
</topico>
<topico>
<titulo>Componentes usados</titulo>
<desc>
&lt;ul&gt;
  &lt;li&gt;lista&lt;/li&gt;
  &lt;li&gt;lista com Resto&lt;/li&gt;
  &lt;li style=&quot;font-weight: bold;&quot;&gt;&lt;a href=&quot;ErlangListComprehension.html&quot; target=&quot;_blank&quot;&gt;list
comprehension&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</desc>
</topico>
<topico>
<titulo>Componentes usados -
Lista</titulo>
<desc> ... &lt;span class="exemplo"&gt;ordenar([4, 3, 9,
3, 7,
4, 2]) -&amp;gt;&lt;/span&gt; ..&lt;br&gt;
&lt;img style=&quot;width: 310px; height: 94px;&quot; alt=&quot;ErlangListaSimples.png&quot; title=&quot;Erlang Lista Simples&quot; src=&quot;ErlangListaSimples.png&quot;&gt; </desc>
</topico>
<topico>
<titulo>Componentes usados -
Lista com resto</titulo>
<desc> ...
&lt;span class="exemplo"&gt;ordenar([Primeiro|Resto]) -&amp;gt;&lt;/span&gt; ...&lt;br&gt;
... &lt;span class="exemplo"&gt;ordenar([4 | 3, 9, 3, 7, 4, 2]) -&amp;gt;&lt;/span&gt; ...&lt;br&gt;
Primeiro = 4&lt;br&gt;
Resto = [3,
9, 3, 7, 4, 2]&lt;br&gt;
&lt;img alt=&quot;ErlangListaCompleta.png&quot; title=&quot;Erlang Lista Completa&quot; src=&quot;ErlangListaCompleta.png&quot;&gt; </desc>
</topico>
<topico>
<titulo>Componentes usados - List Comprehension &lt;a href=&quot;http://www.erlang.org/doc/programming_examples/list_comprehensions.html&quot; target=&quot;_blank&quot;&gt;&lt;img src="ErlangFavicon.png" title="erlang.org" /;&gt;&lt;/a&gt;
</titulo>
<desc>
&lt;span class="exemplo"&gt;[X|| X &amp;lt;- Resto, X
&amp;lt; Primeiro]&lt;/span&gt;&lt;br&gt;
A lista de X tal que X pertence a Resto e X é menor que Primeiro.&lt;br&gt;
&lt;br&gt;
&lt;span class="exemplo"&gt;[X|| X &amp;lt;- [3, 9, 3, 7, 4, 2], X
&amp;lt; 4]&lt;/span&gt;&lt;br&gt;
&lt;em&gt;The list of X such that X is taken from the
list &lt;code&gt;[3,9,3,7,4,2]&lt;/code&gt;and
X is less than 4.&lt;br&gt;
&lt;/em&gt;&lt;img alt=&quot;ErlangListComprehension.png&quot; title=&quot;Erlang List Comprehension&quot; src=&quot;ErlangListComprehension.png&quot;&gt;</desc>
</topico>
<topico>
<titulo>Função completa para
ordenar</titulo>
<desc>
&lt;ol&gt;
  &lt;li&gt;&quot;-module(quicksort).&quot;: nome do arquivo
= quicksort.erl&lt;/li&gt;
  &lt;li&gt;&quot;-export([ordenar/1]).&quot;: &lt;br&gt;
lista de &quot;função/quantidade de parâmetros&quot;&lt;br&gt;
funções visíveis externamente&lt;br&gt;
  &lt;/li&gt;
&lt;/ol&gt;
</desc>
<exemplo> -module(quicksort).&lt;br&gt;
-export([ordenar/1]).&lt;br&gt;
&lt;br&gt;
ordenar([Primeiro|Resto]) -&amp;gt; &lt;br&gt;
&lt;div style=&quot;margin-left: 40px;&quot;&gt;
ordenar([X|| X &amp;lt;- Resto, X
&amp;lt; Primeiro]) ++ &lt;br&gt;
[Primeiro] ++ &lt;br&gt;
ordenar([X||
X &amp;lt;-
Resto, X &amp;gt;= Primeiro]);
&lt;/div&gt;
ordenar([]) -&amp;gt; [].
</exemplo>
</topico>
<topico>
<titulo>Fazer função</titulo>
<desc> ordenar lista de
forma crescente ou decrescente&lt;br&gt;
ordenar(tipo da ordenação, lista) =&amp;gt; lista ordenada&lt;br&gt;
tipo da ordenação:
&lt;ul&gt;
  &lt;li&gt;c = crescente&lt;/li&gt;
  &lt;li&gt;d = decrescente&lt;br&gt;
  &lt;/li&gt;
&lt;/ul&gt;
</desc>
</topico>
<topico>
<titulo>Avaliar solução</titulo>
<exemplo> -module(quicksort2).&lt;br&gt;
-export([ordenar/1, ordenar/2]).&lt;br&gt;
&lt;br&gt;
ordenar(Lista) -&amp;gt; ordenar(c, Lista).&lt;br&gt;
&lt;br&gt;
ordenar(c,[Primeiro|Resto]) -&amp;gt; &lt;br&gt;
&lt;div style=&quot;margin-left: 40px;&quot;&gt;ordenar(c,[X||X &amp;lt;-
Resto,
X &amp;lt;
Primeiro]) ++ &lt;br&gt;
[Primeiro] ++ &lt;br&gt;
ordenar(c,[X||X &amp;lt;- Resto, X
&amp;gt;=
Primeiro]);
&lt;/div&gt;
ordenar(d,[Primeiro|Resto]) -&amp;gt; &lt;br&gt;
&lt;div style=&quot;margin-left: 40px;&quot;&gt;ordenar(d,[X||X &amp;lt;- Resto,
X &amp;gt;=
Primeiro]) ++ &lt;br&gt;
[Primeiro] ++ &lt;br&gt;
ordenar(d,[X||X &amp;lt;- Resto, X&amp;nbsp;&amp;lt;
Primeiro]); &lt;/div&gt;
ordenar(_,[]) -&amp;gt; [].
</exemplo>
</topico>
<topico>
<titulo>Retrospectiva :) :(&amp;nbsp;</titulo>
<desc> </desc>
</topico>
</linguagem>
	
	
