Você está na página 1de 10

MTODOS DE ORDENAO

tilla Negreiros Maia


Universidade do Estado do Rio Grande do Norte (UERN)
Avenida Professor Antonio Campos, - Pres Costa e Silva, Mossor-RN
atilanegreirosmai@gmail.com
Joo Pedro da Costa Ribeiro
Universidade do Estado do Rio Grande do Norte (UERN)
AvenidaProfessorAntonioCampos,PresCostaeSilva,MossorRN
jpuern@gmail.com
Thiago Kleyton Lima dos Santos
Universidade do Estado do Rio Grande do Norte (UERN)
AvenidaProfessorAntonioCampos,PresCostaeSilva,MossorRN
thiagokleyton@hotmail.com

RESUMO
A necessidade de facilitar e agilizar tarefas rotineiras como, por exemplo, a consulta em
uma lista telefnica ou a preparao do extrato bancrio de um cliente, tornou a ordenao de
dados uma das atividades mais utilizadas da computao. Dessa forma, este trabalho apresenta
alguns mtodos de ordenao, demonstrando o funcionamento e expondo as vantagens e
desvantagens de cada um. As tcnicas so comparadas entre si atravs das suas particularidades e
operaes crticas durante o processo de ordenao do arquivo. Apesar de diferir em termos de
eficincia, no h o melhor mtodo, sendo a aplicao de uma tcnica de ordenao dependente
de circunstncias especficas.
PALAVRAS CHAVES. Mtodos de ordenao, operaes crticas,
eficincia.

ABSTRACT
The need to facilitate and streamline routine tasks as, for example, the query in a phone
book or the preparation of a client bank statement, became the ordering of data one of the
activities most commonly used in computing. Therefore, this work presents some ordering
methods, demonstrating the operation and giving the advantages and disadvantages of each. The
techniques are compared to each other through their particularities and critical operations during
the ordering process file. Although different in terms of efficiency, there is no "best" method, and
applying a sorting technique depends on specific circumstances.
KEYWORDS. Ordering methods, critical operations, efficiency.

1. Introduo
Em seu cotidiano o ser humano busca informaes de todos os tipos e nas mais variadas
fontes. Todavia, em virtude da forma como encontram essas informaes, a busca de dados
especficos pode ser trabalhosa e com perda de tempo. Como exemplo, pesquisar um nmero de
telefone numa lista em que a ordem dos nomes dos clientes est conforme solicitaram a
instalao de seus telefones companhia telefnica. Por conseguinte, para resoluo de tais
problemas, uma das atividades mais utilizadas na computao a ordenao, que corresponde ao
processo de rearranjar um conjunto de objetos em uma ordem especfica para facilitar a
recuperao posterior de elementos do conjunto ordenado (Oliveira, 2002).
No processo de ordenao h definies de terminologias bsicas, tais como arquivo,
registro e chave. Um arquivo de tamanho n uma sequncia de n itens onde cada item um
registro (r[0], r[1], ..., r[n-2], r[n-1]). ]. A chave geralmente (mas nem sempre) um subcampo do
registro inteiro. Diz-se que o arquivo est classificado pela chave se i< j, i e j ndices de um vetor,
implicar que k[i] precede k[j] em alguma classificao nas chaves (Tenenbaum, 1995).
H casos em que a quantidade de dados armazenada em cada um dos registros muito
grande que causaria uma sobrecarga ao movimentar esses dados, impossibilitando, assim, a
ordenao. Nestes casos, podemos usar uma tabela auxiliar de ponteiros de forma que esses
ponteiros sejam movidos em vez dos verdadeiros dados. Isso chamado de classificao por
endereos.
Os mtodos de ordenao so classificados em dois grandes grupos:

Ordenao interna: os registros a serem ordenados esto na memria


principal;

Ordenao externa: os registros a serem ordenados esto em uma


memria secundria.

Este trabalho apresenta os mtodos de ordenao mais conhecidos, conforme a sua


abrangncia, analisa sua eficincia e verifica as vantagens e desvantagens de cada um. A seo 2
apresenta consideraes sobre a eficincia de cada mtodo. A seo 3 apresenta ordenao por
troca contendo os mtodos de ordenao bubblesort e quicksort. A seo 4 apresenta ordenao
por seleo contendo o mtodo heapsort. A seo 5 apresenta classificao por insero com o
mtodo shellsort. Na seo 6 feita uma comparao entre os mtodos usados. Finalizando, a
seo 7 apresenta a concluso sobre a pesquisa.
2. Consideraes sobre a eficincia
A eficincia do mtodo de ordenao est inter-relacionada com o tempo gasto pelo
programador ao codificar o programa, o tempo de mquina necessrio para execut-lo e o espao
necessrio para o programa.
Entretanto, em casos de arquivos pequenos, tcnicas sofisticadas para reduo das
exigncias de tempo e espao so piores que mtodos mais simples, em geral menos eficientes. E
se h tempo e espao de mquina suficiente para executar qualquer arquivo, seria um desperdcio
o programador passar bastante tempo analisando mtodos para obter o mximo de eficincia.
Dessa forma, o tempo e o espao de mquina so os aspectos determinantes para definir a
eficincia do programa.
Na avaliao da eficincia de tempo de um mtodo de classificao levado em
considerao o nmero de operaes crticas efetuadas, isto , as comparaes de chaves, as
movimentaes dos registros ou de ponteiros para registros, ou as trocas de dois registros, pois
so as que consomem mais tempo. O nmero da unidade de tempo necessria para a execuo do

programa no levado em considerao tendo em vista as variaes, j que mudam de um


programa para outro, de uma mquina para outra e de um conjunto de dados para outro.
3. Ordenao por troca
3.1. BublleSort
O mtodo de classificao por bolha, como conhecido o Bubblesort, o mais
simples em termos de implementao e tambm o menos eficiente. A ideia bsica desse mtodo
percorrer sequencialmente vrias vezes o vetor, de modo que o elemento mais leve (menor)
situado ao final do vetor (fundo) flutue at o incio deste.
Durante o processo de ordenao, cada passagem consiste em comparar cada elemento
no arquivo com seu sucessor, trocar os elementos e comut-los se eles no estiverem na ordem
correta (Tenenbaum, 1995).
A figura 1 ilustra o processo de funcionamento deste mtodo.

Figura 1: Ilustrao do funcionamento do Bubblesort.

O Bubblesort um algoritmo estvel e de fcil implementao, entretanto ineficiente


caso o vetor j esteja ordenado. Outra desvantagem que sua ordem de complexidade
quadrtica (O(n)), pois o vetor percorrido duas vezes a cada execuo.
3.2. QuickSort
O mtodo de classificao Quicksort (ordenao por partio) o algoritmo de
ordenao interna mais rpido que se conhece para uma ampla variedade de situaes e,
provavelmente o mais utilizado. O algoritmo executado da seguinte forma: seja x um vetor de
inteiros de n elementos, escolhe-se um dos elementos de x, chamado piv. O vetor x
particionado em duas partes, ao lado esquerdo do piv ficam os elementos menores ou iguais ao
piv, e ao lado direito ficam os elementos maiores ou iguais ao piv. Estando o piv colocado na
posio x[j], ele permanecer nessa posio at que o vetor esteja totalmente ordenado. Agora
s repetir o processo com o intervalo de x[0] at x[j-1] e o de x[j+1] at x[n-1]. O processo
repetido at termos o vetor x ordenado.
A figura 2 demonstra passo-a-passo o funcionamento do mtodo quicksort, conforme a
sequncia das etapas:

Figura 2: Ilustrao do funcionamento do Quicksort.

1) Vetor inicialmente desordenado;


2) O primeiro elemento selecionado como piv, este comparado com o segundo
elemento. Como o segundo no menor que o primeiro, no h nenhuma troca;
3) Compara-se, agora, o piv com o terceiro elemento;
4) Como o terceiro elemento menor que o piv, este passa para o lado esquerdo do
piv, o segundo elemento passa a ser o terceiro elemento e o piv passa para a
segunda posio;
5) Compara-se o piv com o quarto elemento e no feita nenhuma troca;
6) Compara-se com o quinto e tambm no feita nenhuma troca;
7) E, por ltimo, compara-se o piv com o sexto e tambm no feita nenhuma troca;
8) Como o piv foi comparado com todos os elementos e as devidas trocas de
posies foram realizadas, ele j est em sua posio correta e, assim, est fixado.
O primeiro elemento formou um sub-vetor com um nico elemento, dessa forma,
est na posio correta, portanto tambm fica fixado;
9) No sub-vetor formado pelos elementos a direita do piv (novo piv selecionado),
cujo valor agora 67, feita uma comparao com o prximo elemento;
10) Como este elemento menor que o piv h a troca de posio;

11) Agora, compara-se com o prximo elemento. No efetuada nenhuma troca;


12) Compara-se com o ltimo elemento.
13) Verifica-se que menor que o piv, ento ele passado para o lado esquerdo do
piv;
14) O piv fixado e o elemento ao seu lado direito tambm fixado, pois forma um
sub-vetor com um nico elemento;
15) Um novo piv selecionado, em seguida compara-se com o prximo elemento e
no feita nenhuma troca. Todos os elementos j esto em suas posies corretas;
16) Por fim, temos o vetor ordenado.
O Quicksort muito eficiente, porm, a implementao desse mtodo complicada e
difcil.
4. Classificao por seleo
Segundo Tenembaum (1995), uma classificao por seleo aquela na qual sucessivos
elementos so selecionados em sequncia e dispostos em suas posies corretas pela ordem.
Qualquer mtodo de classificao por seleo pode ser conceitualizado por um algoritmo que usa
uma fila de prioridade.
4.1. Heapsort
O Heapsort o mtodo de ordenao por rvores baseado no mtodo de seleo
direta, implementando a fila de prioridade como um vetor no ordenado. Consiste em uma
rvore cuja raiz o elemento de menor valor (heap de mnimo), ou o de maior valor (heap de
mximo). O heap binrio uma estrutura de dados em forma de uma rvore, cuja raiz o
elemento mnimo ou mximo. As operaes sobre o heap partem da raiz at o nvel mais
profundo da rvore.
A figura 3 mostra detalhadamente o funcionamento do mtodo heapsort executando os
seguintes passos:
1) Tem-se o vetor inicialmente desordenado;
2) Distribuio dos elementos do vetor em uma rvore binria, colocando os elementos
da esquerda para a direita;
3) Compara a raiz principal com seus filhos, como o filho do lado esquerdo maior
que a raiz, feita uma troca entre os dois elementos;
4) Verifica-se novamente um elemento maior que a raiz e feita outra troca;
5) Como no h nenhum elemento maior que a raiz principal, o elemento que est na
raiz passado para a ltima posio do vetor;
6) A ltima folha colocada na raiz principal;
7) Verifica-se que o filho do lado esquerdo maior que a raiz e efetua a troca;

8) Novamente no existe nenhum elemento maior que a raiz principal ento seu valor
passado para a ltima posio livre do vetor;
9) O valor da ltima folha transferido para a raiz principal;
10) Efetua-se a troca de posio dos elementos colocando o maior na raiz principal;
11) Coloca-se o elemento da raiz principal na ltima posio vazia do vetor;
12) Coloca-se a ltima folha na raiz principal;
13) No existe nenhum elemento maior que a raiz ento esta colocada na ltima
posio do vetor. Por fim, temos o vetor ordenado.

Figura 3: Ilustrao do funcionamento do Heapsort.

O Heapsort aparentemente no eficiente, pois as chaves so movimentadas vrias


vezes. Entretanto, ele gasta um tempo de execuo proporcional a n log n no pior caso. O mtodo

tem como desvantagens apresentar o anel interno do algoritmo bastante complexo comparado ao
Quicksort, e ser instvel.
5. Classificao por insero
A classificao por insero o mtodo utilizado e preferido dos jogadores de cartas.
Em cada passo, a partir de i = 2, o i-simo elemento da sequncia fonte apanhado e transferido
para a sequncia destino, sendo inserido no seu lugar apropriado.
5.1 Shellsort
o mtodo de ordenao mais eficiente dentre os de complexidade quadrtica. Seu
princpio de funcionamento o mesmo utilizado para a ordenao por insero. Basicamente o
algoritmo passa vrias vezes dividindo o vetor em vetores menores, e nestes, so aplicados a
ordenao por insero. Dessa forma, o Shellsort permite trocas de registros que esto distantes
um do outro. Os itens que esto separados h posies so rearranjados de tal forma que todo hsimo item leva a uma sequencia ordenada. Tal sequencia dita estar h-ordenada.
O exemplo da figura 4 demonstra o funcionamento do Shellsort, a partir da definio da
sequncia (4,2,1) de incrementos, que consistem em dividir o vetor em h (valor do incremento)
vetores menores. Para a sequncia de incrementos estabelecida, o vetor foi dividido em vetores
menores dessa maneira:

Para o incremento 4: { (elemento[0], elemento[3]) , (elemento[1],elemento[4]),


(elemento[2], elemento[5]), elemento[6]) };

Para o incremento 2: { (elemento[0], elemento[2], elemento[4], elemento[6]),


(elemento[1], elemento[3], elemento[5]) };

Para o incremento 1: { (elemento[0], elemento[1], elemento[2], elemento[3],


elemento[4], elemento[5]), elemento[6]) };

Figura 4: Ilustrao do funcionamento do Shellsort.

1) Vetor inicialmente desordenado;


Das etapas 2 a 5 so realizadas comparaes dos elementos dos vetores relacionados ao
incremento 4;
2) Compara o elemento[0] com elemento[3], e como o primeiro no menor que o
segundo no h a troca;
3) Segue para o outro do vetor do incremento e compara o elemento[1] com
elemento[4].
4) Os elementos envolvidos na etapa 3 trocam de posio e ,em seguida, h a
comparao do elemento[2] com o elemento[5];
5) Compara o elemento[3] com elemento[6], e como o primeiro no menor que o
segundo no h a troca;
6) Finaliza as comparaes referentes ao incremento 4 e exibe como os elementos
esto ordenados at o momento;
Das etapas 7 a 11 so realizadas comparaes dos elementos dos vetores relacionados ao
incremento 2;
7) Compara o elemento[0] com elemento[2];
8) Os elementos envolvidos na etapa 7 trocam de posio e ,em seguida, h a
comparao do elemento[1] com o elemento[3];
9) Compara o elemento[2] com elemento[4], onde o primeiro maior que o segundo;
10) Os elementos envolvidos na etapa 9 trocam de posio e ,em seguida, h a
comparao do elemento[3] com o elemento[5];
11) O elemento[4] menor que o elemento[6], e dessa forma o vetor permanece
inalterado, concluindo as comparaes para o incremento 2;
12) Finalizada as comparaes dos vetores relacionados
Das etapas 13 a 17 so realizadas comparaes referentes ao incremento 1, de forma que
o mtodo de comparao e troca dos elementos assemelha-se ao Bubblesort . A etapa 18 exibe o
vetor totalmente ordenado em ordem crescente.
O ShellSort uma tima opo para arquivos de tamanho moderado, devido sua
implementao simples e que requer uma quantidade de cdigo pequena. Entretanto, instvel e
tem o tempo de execuo sensvel ordem inicial do arquivo.
6. Comparao entre os mtodos
Com base no nmero de elementos no arquivo e da forma como esto distribudos
(crescente, decrescente ou aleatria), os mtodos em estudo neste trabalho foram comparados
entre si com base no nmero de algumas operaes crticas durante seu processo de
funcionamento.

A tabela 1(Jnior, 2008) mostra a quantidade de comparaes e movimentaes


realizadas durante o processo de ordenao de um vetor com 100, 1000, 10000 e 100000
elementos em ordem crescente.
Vetor Ordenado em Ordem Crescente
100

1000

10000

100000

Comp.

Mov.

Comp.

Mov.

Comp.

Mov.

Comp.

Mov.

Bubblesort

4950

4950

499500

499500

49995000

49995000

4999950000

4999950000

Shellsort

342

684

5457

10914

75243

150486

967146

1934292

Quicksort

606

189

909

1533

12439

17712

1600016

196605

Heapsort

1265

884

19562

12192

264433

156928

3312482

1900842

Tabela1: Quantidade de comparaes e movimentaes nos testes de vetor em ordem crescente.

A tabela 2 (Jnior, 2008) mostra a quantidade de comparaes e movimentaes


realizadas durante o processo de ordenao de um vetor com 100, 1000, 10000 e 100000
elementos em ordem decrescente.
Vetor Ordenado em Ordem Decrescente
100

1000

10000

100000

Comp.

Mov.

Comp.

Mov.

Comp.

Mov.

Comp.

Mov.

Bubblesort

4950

4950

499500

499500

49995000

49995000

4999950000

4999950000

Shellsort

572

914

9377

14834

128947

294190

1586800

2553946

Quicksort

610

336

9016

303

125452

32712

1600030

346602

Heapsort

1125

747

17952

10811

246705

141975

3131748

1747201

Tabela 2: Quantidade de comparaes e movimentaes nos testes de vetor em ordem decrescente.

A tabela 3(Jnior, 2008) mostra a quantidade de comparaes e movimentaes


realizadas durante o processo de ordenao de um vetor com 100, 1000, 10000 e 100000
elementos em ordem aleatria.
Vetor Ordenado em Ordem Aleatria
100

1000

10000

100000

Comp.

Mov.

Comp.

Mov.

Comp.

Mov.

Comp.

Mov.

Bubblesort

4950

2628

499500

242827

49995000

25160491

4999950000

2499236980

Shellsort

818

1160

14364

19821

236735

311978

3711435

4670697

Quicksort

997

570

12852

8136

181203

103575

2114943

1310586

Heapsort

1205

817

18837

11556

255288

149150

3220006

1825075

Tabela 3: Quantidade de comparaes e movimentaes nos testes de vetor em ordem decrescente.

Com base nas tabelas, constatamos que o Bubllesort teve o pior desempenho em todos os
casos. No caso de vetores em ordem aleatria, o Shellsort apresentou-se como o melhor para
arquivos pequenos e o Quicksort teve o melhor desempenho para os arquivos maiores.
7. Concluses
Este trabalho apresentou os mtodos de ordenao mais conhecidos, suas vantagens e
desvantagens e realizou comparaes entre eles. Baseado nessas informaes, levantamos
algumas observaes sobre os mtodos.
Dentre os todos os mtodos, o Bubblesort apresentou-se como o pior, enquanto o
Quicksort foi o mais eficiente, principalmente em grandes arquivos. O Shellsort um mtodo que
adequa-se a todas as situaes e o Heapsort tem o mesmo comportamento para todos os tipos de
vetores.
Apesar das comparaes realizadas entre um mtodo e outro, no h como definir qual
a melhor tcnica geral de classificao. A escolha do mtodo de classificao depende
necessariamente das circunstncias especficas.
8. Referncias
Jnior, A. C. de N., Algoritmos e Estruturas de Dados: Mtodos de Ordenao Interna,
Universidade

Federal

de

Ouro

Preto,

Ouro

Preto,

2008,

http://www.decom.ufop.br/menotti/aedI082/tps/tp3-sol1.pdf, 10, 2012.

Loureiro, A. A. F., Algoritmos e Estruturas de Dados II: Ordenao, Universidade Federal de


Minas
Gerais,
Belo
Horizonte,
http://homepages.dcc.ufmg.br/~loureiro/alg/071/aeds2_ORDENACAO_1pp.pdf
, 10, 2012.
Oliveira, A. B., Mtodos de Ordenao Interna, Visual Book, So Paulo, 2002.
Soma, N. Y. e Sanches, C. A. A., Estrutura de Dados, Anlise de Algoritmos e Complexidade
Estrutural.
Instituto
Tecnolgico
de
Aeronutica,
2008,
http://www.comp.ita.br/~etiene/Ordenacao.pdf, 10, 2012
Tenenbaum, A. M., Estrutura de Dados usando C, MAKRON Books, So Paulo, 1995.

Você também pode gostar