You are on page 1of 5

Universidade de Mogi das Cruzes

Estrutura de Dados e Algoritmos


Aula 05 Algoritmos de Ordenao Interna - Por Distribuio
Algoritmos de Ordenao Interna
Os algoritmos de ordenao interna (em memria) so convencionalmente
baseados em estratgias de comparao ou em estratgias de contagem.
Os Algoritmos de ordenao Interna podem ser classificados como:

Por insero Os algoritmos de insero baseiam-se no


deslocamento de elementos da estrutura frente a um elemento de busca.

Por Seleo A ordenao por seleo parte do princpio de realizar


o isolamento de elementos para posies ordenadas.

Por Troca Os algoritmos de troca so baseados na troca de


posio dos dados, de forma a orden-los.

Por Distribuio O algoritmo de distribuio de chaves funciona


como um ndice de elementos, sendo um bom classificador.

Quick Sort O algoritmo de quick sort o mais rpido que os demais


e baseado na troca e na partio.

Universidade de Mogi das Cruzes


Estrutura de Dados e Algoritmos

Algoritmos de Ordenao por Distribuio

Algoritmo de Distribuio de Chaves


Este algoritmo tambm conhecido pelos nomes: radixsort , algoritmo das
razes , indexao direta .
Consiste em distribuir os elementos da lista em sub-listas de acordo com o
valor de um digito da chave de ordenao. Aps a distribuio, concatena-se
as sub-listas para formar uma nova lista.
Inicia-se com o digito menos significativo d chave de ordenao e repete-se a
distribuio e a concatenao para todos os dgitos.

Ta difcil de entender? Calma, vamos explicar melhor isso tudo...

Sua origem remonta aos tempos em que ocorriam tabulaes de dados


atravs de cartes perfurados, onde utilizavam-se mquinas apropriadas
para o clculo de dados, como, por exemplo, o senso populacional.
Posteriormente este tipo de cartes foi utilizado como entrada de dados em
computadores digitais.

Universidade de Mogi das Cruzes


Estrutura de Dados e Algoritmos
Mas o que os cartes tm a ver com o algoritmo de ordenao?
Acontece que era necessria a separao fsica desses
cartes, e eles eram classificados por um campo numrico
de um ou mais algarismos. Pois bem, todos os cartes que
terminassem em 0 eram armazenados no escaninho de
nmero 0, os de nmero 1 no escaninho 1, e assim por
diante. Depois disso, eram reorganizados em funo do
algarismo da dezena (penltimo), e assim por diante, at
sua ordenao.
Veja como mostra a figura ao lado.
Agora vamos ver o exemplo abaixo e entender melhor.

Vamos ver um exemplo:


Dado a lista abaixo, orden-la-emos pelo mtodo de Distribuio.
O primeiro passo a ser realizado separar todos as chaves (elementos da
lista) pelo seu digito menos significativo (a unidade):
Obs.: Se os valores das chaves forem valores no numricos precisamos
mapear o valor para um numero.
304 256 027 009 042 778 813 275 485
Identificar os dgitos menos significativos

Universidade de Mogi das Cruzes


Estrutura de Dados e Algoritmos

Separar as chaves em sub-listas de acordo com o digito menos significativo


(como se fosse o exemplo do escaninho)
0

2
042

3
813

4
304

5
275
485

6
256

7
027

8
778

9
009

Agora precisamos concatenar a lista novamente em uma nica lista.


Temos ento que a ordem dos valores das chaves dada pela seqncia:
042, 813, 304, 275, 485, 256, 027, 778 e 009 .
Percebe-se que ainda no temos uma lista ordenada.
Agora precisamos pegar o prximo digito do elemento (da dezena) e fazer o
mesmo procedimento separando as chaves em novas sub-listas.
0
304
009

1
813

2
027

4
042

5
256

7
275
778

8
485

Agora precisamos concatenar a lista novamente em uma nica lista.


Temos ento que a ordem dos valores das chaves dada pela seqncia:
304, 009, 813, 027, 042, 256, 275, 778 e 485
Percebe-se que ainda no temos uma lista ordenada.
Agora precisamos pegar o prximo digito do elemento (da centena) e fazer o
mesmo procedimento separando as chaves em novas sub-listas.

Universidade de Mogi das Cruzes


Estrutura de Dados e Algoritmos

0
009
027
042

2
256
275

3
304

4
485

7
778

8
813

Agora precisamos concatenar a lista novamente em uma nica lista.


Temos ento que a ordem dos valores das chaves dada pela seqncia:
009, 027, 042, 256, 275, 304, 485, 778 e 813
Percebe-se que agora temos uma lista completamente ordenada.
O nmero de vezes que o procedimento de dividir e concatenar a lista feito
ser nmero mximo de dgitos que os valores das chaves possuem (em nosso
caso foram 3 vezes pois o maior numero de dgitos 3, como podemos observar
o nmero 813). Quando temos uma chave com nmero de dgitos menor (no
caso do 9, 27 e 42) acrescentamos zero a esquerda, sem que influencie o valor
da chave.

Como ficaria esse processo no caso da ordenao decrescente?

Exerccio:
Ordenar a lista a seguir pelo mtodo de ordenao por Distribuio.
Mostrar passo a passo a evoluo da ordenao.
Lista: 37 51
12 45

1 23

105

40 39 (ordem crescente)

56 89 14 1

4 (ordem decrescente)

You might also like