You are on page 1of 15

Algoritmos de ordenao:

anlise e comparao
Veja neste artigo os conceitos bsicos de algoritmo e
um dos principais tipos de algoritmos: os de
ordenao. Sero apresentados os principais tipos e
uma comparao entre eles.
Artigo realizado sob orientao do professor Juliano Schimiguel Universidade Cruzeiro do Sul.
Problemas so questes propostas em busca de uma soluo. Com o
propsito de conceder uma soluo para certo problema, existem os
algoritmos, cada problema que decdivel possui um algoritmo que
determina uma soluo para cada instncia desse problema.
Algoritmos descrevem passo a passo os procedimentos para chegar a
uma soluo de um problema e podem ser representados de trs
formas:

A forma de descrio narrativa, na qual se usa a linguagem


nativa de quem escreve. Essa forma no segue um padro
definido e pode sofrer vrias interpretaes por quem l;

Outra forma de representar um algoritmo o fluxograma, uma


representao visual que utiliza smbolos que so figuras
geomtricas, cada uma com sua funo especfica. Essa
representao, como o prprio nome diz, mostra o fluxo do
algoritmo e tambm elimina as vrias interpretaes que a
descrio narrativa permitia sobre um algoritmo;

Por ltimo, existe a linguagem algoritma (Pseudocdigo ou


Portugol) que a que mais se aproxima da estrutura de uma
linguagem estruturada.

Um tipo de algoritmo muito usado na resoluo de problemas


computacionais so os algoritmos de ordenao, que servem para
ordenar/organizar uma lista de nmeros ou palavras de acordo com a
sua necessidade. As linguagens de programao j possuem mtodos
de ordenao, mas bom saber como funcionam os algoritmos, pois
h casos de problemas em que o algoritmo de ordenao genrico
no resolve, s vezes necessrio modific-lo.
Os mais populares algoritmos de ordenao so: Insertion sort,
Selection sort, Bubble sort, Comb sort, Quick sort, Merge sort, Heap
sort e Shell sort. Neste artigo sero estudados os algoritmos Bubble
sort, Selection Sort, Quick sort e o Insertion sort, explicando o
funcionamento de cada um deles.

Definio de Algoritmos
O Algoritmo um esquema de resoluo de um problema. Pode ser
implementado com qualquer sequncia de valores ou objetos que
tenham uma lgica infinita (por exemplo, a lngua portuguesa, a
linguagem Pascal, a linguagem C, uma sequncia numrica, um
conjunto de objetos tais como lpis e borracha), ou seja, qualquer
coisa que possa fornecer uma sequncia lgica.
Podemos ilustrar um algoritmo pelo exemplo de uma receita culinria,
embora muitos algoritmos sejam mais complexos. Um Algoritmo
mostra passo a passo os procedimentos necessrios para resoluo
de um problema.

Descrio Narrativa
A descrio narrativa o uso da sua lngua nativa para descrio dos
passos para se resolver um problema.
A vantagem dessa forma de representao que qualquer um pode
faz-la sem ter conhecimentos avanados.
A desvantagem que no h um padro, cada pessoa pode escrever
como quiser. Outra desvantagem a impreciso, ou seja, a descrio
pode no ficar clara e pode-se tirar vrias interpretaes diferentes
de um mesmo algoritmo.
Abaixo temos um exemplo de algoritmo usando a descrio narrativa:
Listagem 1: Algoritmo Calculando a mdia em descrio narrativa
Incio
Passo 1: Obter os valores de n1,n2,n3;
Passo 2: Somar os valores do passo 1;
Passo 3: Dividir o resultado obtido no Passo 2 por 3;
Passo 4: Se o resultado do Passo 3 for maior ou igual a 6 ento
escreva
Parabns voc foi aprovado, seno, escreva Infelizmente voc
ficou de exame
e v para o fim do programa
Fim

Fluxograma
O fluxograma passou a ser usado para eliminar ambiguidades dos
algoritmos. So smbolos grficos padronizados, cada um
representado por uma forma geomtrica que implica em uma ao,
instruo ou um comando distinto.

Esta forma intermediria a descrio narrativa e ao pseudocdigo,


pois mais precisa do que a primeira, porm, no se preocupa com
detalhes de implementao do programa, como os tipos das variveis
usadas.

Figura 1: Algoritimo Calcular Mdia em representao de


fluxograma

Linguagem Algoritma (Pseudocdigo ou


Portugol)
Essa forma de representao surgiu para tentar suprir as deficincias
das outras representaes. Consiste na definio de uma
pseudolinguagem de programao, cujos comandos so em
portugus, mas que j lembram um pouco a estrutura de uma

linguagem de programao estruturada, ou seja, a pseudolinguagem


se assemelha muito ao modo como os programas so escritos. Isso
vai permitir que os algoritmos sejam traduzidos, quase que
diretamente, para uma linguagem de programao.
Listagem 2: Algoritmo Calcular Mdia em linguagem altoritma
algoritmo CalcularMedia
var
n1,n2,n3,media :real;
inicio
leia(n1,n2,n3);
media (n1+n2+n3)/3;
se

media>=6 entao
escreva(Parabns voc foi aprovado);

seno
escreva(Infelizmente voc ficou de exame);
Fimse
fimalgoritmo

Algoritmos de Ordenao
Algoritmo de ordenao, em cincia da computao, um algoritmo
que coloca os elementos de uma dada sequncia em uma certa
ordem. Em outras palavras efetua sua ordenao completa ou parcial.
O objetivo da ordenao facilitar a recuperao dos dados de uma
lista.
Para este artigo foram escolhidos alguns algoritmos de ordenao
para serem estudados que so: Bubble Sort, Selection Sort, Quick
Sort e Insertion Sort.

Bubble Sort

Bubble sort o algoritmo mais simples, mas o menos eficientes.


Neste algoritmo cada elemento da posio i ser comparado com o
elemento da posio i + 1, ou seja, um elemento da posio 2 ser
comparado com o elemento da posio 3. Caso o elemento da
posio 2 for maior que o da posio 3, eles trocam de lugar e assim
sucessivamente. Por causa dessa forma de execuo, o vetor ter
que ser percorrido quantas vezes que for necessria, tornando o
algoritmo ineficiente para listas muito grandes.
Leia tambm: Entendendo o Algortmo Bubble Sort em Java.

Figura 2: Esquema de funcionamento do Buble Sort

verificado se o 3 maior que 5, por essa condio ser falsa,


no h troca.

verificado se o 5 maior que 1, por essa condio ser


verdadeira, h uma troca.

verificado se o 5 maior que 2, por essa condio ser


verdadeira, h uma troca.

verificado se o 5 maior que 4, por essa condio ser


verdadeira, h uma troca.

O mtodo retorna ao incio do vetor realizando os mesmos


processos de comparaes, isso feito at que o vetor esteja
ordenado.

Selection Sort
Este algoritmo baseado em se passar sempre o menor valor do
vetor para a primeira posio (ou o maior dependendo da ordem
requerida), depois o segundo menor valor para a segunda posio e
assim sucessivamente, at os ltimos dois elementos.
Neste algoritmo de ordenao escolhido um nmero a partir do
primeiro, este nmero escolhido comparado com os nmeros a
partir da sua direita, quando encontrado um nmero menor, o
nmero escolhido ocupa a posio do menor nmero encontrado.
Este nmero encontrado ser o prximo nmero escolhido, caso no
for encontrado nenhum nmero menor que este escolhido, ele
colocado na posio do primeiro nmero escolhido, e o prximo
nmero sua direita vai ser o escolhido para fazer as comparaes.
repetido esse processo at que a lista esteja ordenada.

Figura 3: Esquema de funcionamento do Selection Sort

Neste passo o primeiro nmero escolhido foi o 3, ele foi


comparado com todos os nmeros sua direita e o menor
nmero encontrado foi o 1, ento os dois trocam de lugar.

O mesmo processo do passo 1 acontece, o nmero escolhido foi


o 5 e o menor nmero encontrado foi o 2.

No foi encontrado nenhum nmero menor que 3, ento ele fica


na mesma posio.

O nmero 5 foi escolhido novamente e o nico nmero menor


que ele sua direita o 4, ento eles trocam.

Vetor j ordenado.

Insertion sort

O Insertion sort um algoritmo simples e eficiente quando aplicado


em pequenas listas. Neste algoritmo a lista percorrida da esquerda
para a direita, medida que avana vai deixando os elementos mais
esquerda ordenados.
O algoritmo funciona da mesma forma que as pessoas usam para
ordenar cartas em um jogo de baralho como o pquer.

Figura 4: Esquema de funcionamento do Insertion Sort

Neste passo verificado se o 5 menor que o 3, como essa


condio falsa, ento no h troca.

verificado se o quatro menor que o 5 e o 3, ele s menor


que o 5, ento os dois trocam de posio.

verificado se o 2 menor que o 5, 4 e o 3, como ele menor


que 3, ento o 5 passa a ocupar a posio do 2, o 4 ocupa a

posio do 5 e o 3 ocupa a posio do 4, assim a posio do 3


fica vazia e o 2 passa para essa posio.
O mesmo processo de comparao acontece com o nmero 1, aps
esse processo o vetor fica ordenado.

Quick sort
O Quicksort o algoritmo mais eficiente na ordenao por
comparao. Nele se escolhe um elemento chamado de piv, a partir
disto organizada a lista para que todos os nmeros anteriores a ele
sejam menores que ele, e todos os nmeros posteriores a ele sejam
maiores que ele. Ao final desse processo o nmero piv j est em
sua posio final. Os dois grupos desordenados recursivamente
sofreram o mesmo processo at que a lista esteja ordenada.

Figura 5: Esquema de funcionamento do Quick Sort

O nmero 3 foi escolhido como piv, nesse passo procurado


sua direita um nmero menor que ele para ser passado para a
sua esquerda. O primeiro nmero menor encontrado foi o 1,
ento eles trocam de lugar.

Agora procurado um nmero sua esquerda que seja maior


que ele, o primeiro nmero maior encontrado foi o 5, portanto
eles trocam de lugar.

O mesmo processo do passo 1 acontece, o nmero 2 foi o


menor nmero encontrado, eles trocam de lugar.

O mesmo processo do passo 2 acontece, o nmero 4 o maior


nmero encontrado, eles trocam de lugar.

O vetor desse exemplo um vetor pequeno, portanto ele j foi


ordenado, mas se fosse um vetor grande, ele seria dividido e
recursivamente aconteceria o mesmo processo de escolha de
um piv e comparaes.

Estudo de caso
Para realizao prtica deste artigo, foram feito testes com os
algoritmos estudados, os testes foram os seguintes:
Verificar o comportamento dos algoritmos em relao ao tempo,
movimentaes de trocas e comparaes.
Foram testadas 3 ordens de listas com 3 tamanhos diferentes cada:

Ordem 1: lista ordenada em ordem crescente.

Ordem 2: lista ordenada em ordem decrescente.

Ordem 3: lista desordenada com nmeros aleatrios.

Os resultados foram o seguintes:

Ordem 1
Tamanho do vetor: 100
Algoritmo

Tempo(ms)

Comparaes

Movimentaes

Bubble sort

0,0988

5050

Selection Sort

0,0602

4950

297

Insertion sort

0,0038

99

198

Quick sort

0,0141

606

189

Tamanho do vetor: 1000


Algoritmo

Tempo(ms)

Comparaes

Movimentaes

Bubble sort

9,5415

500500

Selection Sort

5,4587

499500

2997

Insertion sort

0,0359

999

1998

Quick sort

0,1602

9009

1533

Tamanho do vetor: 10000


Algoritmo

Tempo(ms)

Comparaes

Movimentaes

Bubble sort

934,5364

50005000

Selection Sort

508,5891

49995000

29997

Insertion sort

0,3558

9999

19998

Quick sort

2,0824

125439

17712

Ordem 2
Tamanho do vetor: 100

Algoritmo

Tempo(ms)

Comparaes

Movimentaes

Bubble sort

0,2045

5050

14850

Selection Sort

0,0750

4950

297

Insertion sort

0,1173

99

5148

Quick sort

0,0147

610

336

Tamanho do vetor: 1000


Algoritmo

Tempo(ms)

Comparaes

Movimentaes

Bubble sort

20,3377

500500

1498500

Selection Sort

6,9038

499500

2997

Insertion sort

11,4277

999

501498

Quick sort

0,1622

9016

3030

Tamanho do vetor: 10000


Algoritmo

Tempo(ms)

Comparaes

Movimentaes

Bubble sort

1838,0272

50005000

149985000

Selection Sort

665,2050

49995000

29997

Insertion sort

1074,1171

9999

50014998

Quick sort

2,1279

125452

32712

Ordem 3
Tamanho do vetor: 100
Algoritmo

Tempo(ms)

Comparaes

Movimentaes

Bubble sort

0,1596

5050

6777

Selection Sort

0,0698

4950

297

Insertion sort

0,0570

99

2457

Quick sort

0,0314

897

576

Tamanho do vetor: 1000

Algoritmo

Tempo(ms)

Comparaes

Movimentaes

Bubble sort

16,6730

500500

756840

Selection Sort

5,6664

499500

2997

Insertion sort

5,7523

999

254278

Quick sort

0,3725

13138

7983

Tamanho do vetor: 10000


Algoritmo

Tempo(ms)

Comparaes

Movimentaes

Bubble sort

1455,9734

50005000

74237889

Selection Sort

545,1068

49995000

29997

Insertion sort

539,6891

9999

24765961

Quick sort

4,5072

176065

103635

Concluso
Com base nos testes realizados foram obtidas as seguintes
concluses:
Bubble sort
Para listas j ordenadas em ordem crescente o nico algoritmo que
no realiza movimentaes, mas em compensao o que tem o
maior tempo e o maior nmero de comparaes. No s em listas j
ordenadas, mas em todos os casos o bubble sort se mostrou um
algoritmo ineficiente.
Selection sort
Nas listas de ordem 1 e ordem 3, o selection sort foi o segundo pior
algoritmo, mas se mostrou mais eficiente do que o Insertion sort em
relao ao tempo e a quantidade de movimentaes na lista de
ordem 2.

Insertion Sort
Na lista de ordem 1, o Insertion sort se mostrou mais eficiente que
todos os outros algoritmos em relao ao tempo e comparaes. Na
lista de ordem 2 foi menos eficiente do que o selection sort e na lista
de ordem 3 a diferena de tempo entre o insertion e o selection foi
pequena.
Quick Sort
O quick sort certamente o algoritmo mais eficiente em listas
totalmente desordenadas, ele se torna muito eficiente em relao aos
outros no quesito de tempo. Na lista de ordem 3 e na de ordem 2 a
diferena de tempo do quick sort em comparao aos outros foi
absurdamente grande.

Leia mais em: Algoritmos de ordenao: anlise e


comparao http://www.devmedia.com.br/algoritmos-de-ordenacao-analise-ecomparacao/28261#ixzz3UIzlq5oq