You are on page 1of 18

ESTRUTURA DE DADOS II - 2002/1

Ordenao de Dados
+ Conceitos Bsicos + Ordenao por Insero + Ordenao por Trocas + Ordenao por Seleo + Ordenao por Distribuio de Chaves + Ordenao por Intercalao + Ordenao por Clculo de Endereos + Comparao entre os Mtodos

ORDENAO DE DADOS
Conceitos Bsicos
+ Importncia da ordenao ou classificao

de dados em atividades rotineiras:


+ + + + +

Livros numa biblioteca Agenda e catlogos telefnicos Dicionrios Arquivos com cadastro de funcionrios

ORDENAO DE DADOS
Conceitos Bsicos
+ Definio (Dic. Aurlio)
+ +

Pr em ordem; arrumar,

Organizao dos elementos de um conjunto de acordo com uma relao de ordem com a qual se atribui, em geral, a todo elemento, um antecedente e um sucessor.

ORDENAO DE DADOS
Conceitos Bsicos
+ Princpios da Ordenao Considerando 3 elementos: a, b, c e < (< significando precedncia) 1) Princpio da triconomia a < b, a=b, b < a 2) Princpio da transitividade Se a < b e b < c ento a < c

ORDENAO DE DADOS
Conceitos Bsicos
+ Estrutura de Dados Arquivo ou tabela com uma sequncia de n registros R1, R 2, , R n.
+ + Cada + + +

registro contm uma certa quantidade de informaes divididas em campos. Um destes campos, ou a combinao de dois ou mais, conhecido como chave. O valor da chave usado para a classificao dos registros. Os demais campos no tm influncia alguma nos algoritmos de classificao.

ORDENAO DE DADOS
Conceitos Bsicos
+ Formas de Rearranjar os registros de um

arquivos:
+

Contigidade Fsica :
+

entradas so fisicamente ordenadas;

+ custo muito alto na movimentao dos dados.


10 19 13 12 07 07 10 12 13 19

Antes

Depois

ORDENAO DE DADOS
Conceitos Bsicos
+ Formas de Rearranjar os registros de um

arquivos:
+

Vetor Indireto de Ordenao (VIO):


+ entradas so mantidas nas posies originais; + um vetor (VIO) indica a seqncia de ordenao; + custo baixo pois no envolve movimentao de

dados.

Chave
1 2 3 4 5

10 19 13 12 07

VIO 5 1 2 4 3
1 4 5

3 2

ORDENAO DE DADOS
Conceitos Bsicos
+ Formas de Rearranjar os registros de um

arquivos:
+

Encadeamento :
+ entradas so mantidas nas posies originais; + formada uma lista encadeada para indicar a

ordenao; + custo baixo, mas necessita de mais um campo para indicar encadeamento; + deve existir um ponteiro para o primeiro elemento.

ORDENAO DE DADOS
Conceitos Bsicos
10 2 19 3 13
1

12 5 07
4

Antes

1 2 3 4 5

10 19 13 12 07

4 2 3 1

Depois

5 Ponteiro p/ primeiro elemento da tabela

ORDENAO DE DADOS
Conceitos Bsicos
+ Algoritmos de Ordenao
+

Ordenao interna:
+ A classificao feita na estrutura como um todo,

geralmente num conjunto pequeno de dados. + O processo realizado internamente (ou quase) na memria principal.
+

Ordenao externa:
+ A classificao feita sobre parte de uma grande

estrutura. + impossvel colocar toda a estrutura na memria principal. + H necessidade de contar com auxlio de memrias de armazenamento de massa.

ORDENAO DE DADOS
Conceitos Bsicos
+ Algoritmos de Ordenao: Ordenao Interna Ordenao por Insero: os algoritmos baseiam-se no deslocamento de elementos da estrutura frente a um elemento de busca.
+ + Insero direta + Incrementos decrescentes (shell sort)

Ordenao por Troca: os algoritmos baseiam-se na troca de posio dos dados.Realiza a classificao por sucessivas comparaes dos elementos e, caso no estejam na posio correta, faz-se a troca da posio.
+ + Mtodo da Bolha (buble sort) + Mtodo da Agitao (shake sort) + Mtodo da troca e partio (quicksort)

ORDENAO DE DADOS
Conceitos Bsicos
+ Algoritmos de Ordenao: Ordenao Interna Ordenao por Seleo: a ordenao por seleo parte do princpio de realizar o isolamento de elementos para posies ordenadas.
+ + Seleo direta + Seleo em rvore (heapsort )

ORDENAO DE DADOS
Conceitos Bsicos
+ Algoritmos de Ordenao: Ordenao Interna Ordenao por Distribuio de Chaves: O algoritmo de distribuio de chaves funciona como um ndice de elementos, sendo um bom classificador. + Ordenao por Intercalao: A ordenao por intercalao parte da idia de particionar em blocos a estrutura para melhor realizar a classificao.
+

Ordenao por clculo de endereo: a ordenao feita atravs de funes de distribuio, possibilitando que um simples clculo de endereo determine o posicionamento de um dado.
+

ORDENAO DE DADOS
Ordenao por Insero
+ Insero Direta
+

Princpio
+ consiste em, dado um vetor para ordenao,

percorrer elemento por elemento deslocando-o e inserindo-o na posio ordenada. A idia formar um bloco de valores ordenados e outro de desordenados, e ir passando os valores de um bloco a outro.
+ usado para conjunto pequeno de dados. + tem baixa eficincia em relao ao tempo total para

realizar uma classificao. medida que o conjunto de dado a ser classificado aumenta, diminui o tempo de classificao do conjunto como um todo.

ORDENAO DE DADOS
Ordenao por Insero Direta
+ Exemplo
Vetor Original Diviso inicial Bloco dos ... 1a iterao 2a iterao 3a iterao 4a iterao 5a iterao 6a iterao (vetor ordenado) 18 18 15 15 7 7 9 9 23 23 16 16 14 14

ordenados

desordenado

15 7 7 7 7 7

18 15 9 9 9 9

7 18 15 15 15 14

9 9 18 18 16 15

23 23 23 23 18 16

16 16 16 16 23 18

14 14 14 14 14 23

ORDENAO DE DADOS
Ordenao por Insero Direta
+ Algoritmo
+ O primeiro elemento do vetor considerado ordenado e

os seguintes desordenados;
+ Busca-se os elementos do bloco dos desordenados e

compara-se com os do bloco de desordenados.


+ Faz-se a insero na posio correta. + Repete-se o processo at que os elementos do bloco

de desordenados tenham passado para o bloco de ordenados.

ORDENAO DE DADOS
Ordenao por Insero Direta
+ Algoritmo (pseudocdigo)
Constante TAMANHO = 10 Varivies vetor [1..TAMANHO]: inteiro i, j, k, trab : inteiro achou: lgico Incio Para i 1 at TAMANHO faa leia vetor [ i ] Fim-para Para i 2 at TAMANHO faa j1 achou F Enquanto ((j < i) e (no achou) faa Se vetor[ I ] < vetor [ j ] ento achou V seno jj+1 fim-se Fim-enquanto

ORDENAO DE DADOS
Ordenao por Insero Direta
+ Algoritmo (pseudocdigo)

Se achou = Vento trab vetor [ i ] ki-1 Enquanto k >= j faa vetor[ k+1 ] vetor [ k ] kk-1 Fim-enquanto vetor [ j ] trab Fim-se Fim-Para Fim

ORDENAO DE DADOS
Ordenao por Insero Direta
Constante TAMANHO = 10 Varivies vetor [1..TAMANHO]: inteiro I, j, k,chave : inteiro achou: lgico Incio Para i 1 at TAMANHO faa leia vetor [ i ] Fim-para Para i 2 at TAMANHO faa chave vetor [ j ] jj-1 achou F enquanto (( i > 0 ) e (vetor [ i ] > chave )) faa vetor[ I + 1 ] vetor [i] ii+1 fim-enquanto vetor [ i + 1 ] chave Fim-Para Fim

Algoritmo (outra verso)

ORDENAO DE DADOS
Ordenao por Insero Direta
+ Anlise de Desempenho do Algoritmo
+ fortemente influenciado pela ordem inicial das chaves

a serem ordenadas. Se a chave a ser inserida for menor que as que esto no bloco de ordenadas, elas devem ser transpostas uma posio direita para dar lugar quela que vai ser inserida.
+ Situao mais desfavorvel quando o o bloco a ser

ordenado se apresenta na ordem contrria ordem desejada pois acarreta deslocamento de todos os dados direita.

10

ORDENAO DE DADOS
Ordenao por Insero Direta
+ Anlise de Desempenho do Algoritmo
+ Consideraes:
+ a distncia mdia das chaves fora do local n/2

posies . A distncia mnima 1 e a mxima n - 1.


+ A quantidade de chaves fora do local pode variar de 0 a

n - 1. Mesmo que o vetor esteja na ordem inversa, pelo menos uma chave estar na posio correta.

ORDENAO DE DADOS
Ordenao por Insero Direta
+ Anlise de Desempenho do Algoritmo
A 0 1 2 3 ... k=n-1 B 0 n/2 2 x n/2 3 x n/2 ... k x n/2 C n-1 n-2 n-3 n-4 ... n-(K+1)

A quantidade de chaves fora do local B nmero de comparaes para descobrir o local correto de cada chave fora de seu lugar C nmero de comparaes para descobrir que as demais chaves esto no seu local correto

11

ORDENAO DE DADOS
Ordenao por Insero Direta
+ Anlise de Desempenho do Algoritmo
+ Concluses:
+ o total de comparaes a serem efetuadas a soma das

colunas B e C, isto , (k x n/2) + (n - (k+1)). + No melhor caso (k = 0), tem-se n -1 comparaes. + No pior caso (k = n -1), tem-se (n2 - n) / 2 comparaes.
+ a mdia de comparaes a mdia aritmtica entre o

melhor e pior caso, isto , ((n - 1) + (n2 - n) / 2) / 2.


+ Nmero mdio de comparaes = (n2 + n - 2) / 4 + o nmero mdio de chaves fora do local a mdia

aritmtica entre a primeira e ltima chave fora de local


+ (0 + (n - 1)) / 2 = (n - 1)/2

ORDENAO DE DADOS
Ordenao por Insero
+ Incrementos Decrescentes (shell sort)
+ +

Algoritmo proposto por Ronald L. Shell (1959)

uma extenso do algoritmo de insero direta com a diferena de que o vetor usado no processo de classificao dividido em vrios segmentos (blocos). O vetor dividido em i segmentos, de tal forma que cada segmento possua n/i chaves que classificado separadamente.
+

12

ORDENAO DE DADOS
Ordenao por Insero: Mtodo Shell Sort
+ Descrio
+ Considerando

o vetor V[1..n], o mesmo dividido em i segmentos onde i um incremento: segmento 1: V[1], V[i+1], v[2i+1], v[3i+1], ... segmento 2: V[2], V[i+2], v[2i+2], v[3i+2], ... segmento 3: V[3], V[i+3], v[2i+3], v[3i+3], ... ... Segmento i: V[i], V[i+i], v[2i+i], v[3i+i], ...

ORDENAO DE DADOS
Ordenao por Insero: Mtodo Shell Sort + Descrio
+ +

Qual o melhor valor de i?

O valor do incremento inicial dado por 2NP(i= 2 NP), onde NP o nmero de passos para ordenar o vetor (NP fornecido pelo usurio e uma aproximao inicial). Exemplo: Se NP=3, o valor do incremento i em cada passo seria: i = 23 = 8
i = 22 = 4 i = 21 = 2 i = 20 = 1

A cada passo, o valor de i diminudo pela metade do valor anterior dando origem a novos segmentos (a metade do nmero anterior).
+

13

ORDENAO DE DADOS
Ordenao por Insero: Mtodo Shell Sort + Descrio
aplicado mtodo da ordenao por insero direta em cada passo e em cada segmento originado.
+

O processo repetido at que i = 1. Quando aplicada a ordenao com i =1, o vetor estar classificado.
+ + Vantagem:

o mtodo shell faz classificaes parciais do vetor, aumentando o desempenho nos passos seguintes, j que a insero direta acelerada quando o vetor estiver parcialmente ordenado.

ORDENAO DE DADOS
Ordenao por Insero: Mtodo Shell Sort
NP = 2 Vetor original (desordenado)
1 2 3 4 5 6 7 8 9 10 11 12 17 29 42 15 21 22 47 37 52 43 27 12

1 SO S PA

I = 2NP = 22 = 4
Segmento 1
1 5 9

Segmento 2
2 6 10

Segmento 3
3 7 11

Segmento 4
4 8 12

17 21 52

29 22 43

42 47 27

15 37 12

Aplicando-se a insero direta em cada segmento


17 21 52 1 17 2 22 3 27 22 29 43 4 12 5 21 6 29 27 42 47 7 42 8 15 9 10 52 43 12 15 37

Obtm-se o vetor
11 12 47 37

14

ORDENAO DE DADOS
Ordenao por Insero: Mtodo Shell Sort
Vetor originado no PASSO 1
1 17 2 22 3 27 4 12 5 21 6 29 7 42 8 15 9 10 52 43 11 12 47 37

2 SO S PA

I = 2NP-1 = 22-1 = 21 = 2
Segmento 1
1 3 5 7 9 11 2 4

Segmento 2
6 8 10 12

17 27 21

42 52 47

22 12 29

15 43 37

Aplicando-se a insero direta em cada segmento


17 21 27 42 47 52 12 15 22 29 37 43

Obtm-se o vetor
1 17 2 12 3 4 21 15 5 6 27 22 7 42 8 29 9 47 10 37 11 12 52 43

ORDENAO DE DADOS
Ordenao por Insero: Mtodo Shell Sort
L INA
Vetor originado no PASSO 2
1 17 2 12 3 4 21 15 5 6 27 22 7 42 8 29 9 47 10 37 11 12 52 43

PA

SO

I = 2NP-2 = 22-2 = 20 = 1 indica ltima classificao Aplicando-se a insero direta no vetor obtido no passo anterior, obtm-se o vetor:
1 12 2 15 3 4 17 21 5 6 22 27 7 29 8 37 9 42 10 43 11 12 47 52

15

ORDENAO DE DADOS
Ordenao por Insero: Mtodo Shell Sort + Algoritmo (pseudocdigo)
Constante TAMANHO = 12 Varivies vetor [1..TAMANHO]: inteiro i, j, NP, INC : inteiro Incio Para i 1 at TAMANHO faa leia vetor [ i ] Fim-para leia NP Para i NP at 0 passo -1 faa INC 2 ** i para j 1 at INC faa Mtodo_Shell (vetor, INC, j, TAMANHO) fim-para fim-para Fim

ORDENAO DE DADOS
Ordenao por Insero: Mtodo Shell Sort
Procedimento Mtodo_Shell (vetor, r, s, t) Incio Varivies i, j, k, trab : inteiro; achou: lgico Para i (s + r) at t passo r faa js achou F Enquanto (j < i) e (no achou) faa Se vetor [ i ] < vetor [ j ] ento achou V Seno jj+r Fim-se Fim-enquanto Se achou ento trab vetor [i ] ki+r Enquanto k > (j - r) faa vetor[ k + r ] vetor [ k ] kk-r Fim-enquanto vetor [ j ] trab Fim-se Fim-Para Fim Mtodo_Shell

16

ORDENAO DE DADOS
Ordenao por Insero: Mtodo Shell Sort + Anlise de Desempenho do Algoritmo
complexa. Alguns problemas matemticos relacionados no foram resolvidos, como por exemplo, determinar o efeito da ordenao de um passo produz nos passos subseqentes.
+

Ainda no se conhece exatamente a melhor seqncia de incrementos para produzir melhores resultados.
+

recomendvel que o valor inicial do incremento seja um valor que divida o vetor de chaves no maior nmero possvel de segmentos de mais de um elemento.
+

ORDENAO DE DADOS
Ordenao por Insero: Mtodo Shell Sort + Anlise de Desempenho do Algoritmo
O desempenho do mtodo quadrtico, isto , o desempenho esperado na classificao de cada um dos segmentos de (n/i)2. (n/i o nmero de chaves em i segmentos).
+

O desempenho da classificao dos i segmentos em torno de i x (n/i)2 = n 2/i.


+

recomendvel que o valor inicial do incremento seja um valor que divida o vetor de chaves no maior nmero possvel de segmentos de mais de um elemento.
+

17

ORDENAO DE DADOS
Ordenao por Insero
+ Exerccios
1) Um vetor contm os elementos exibidos a seguir. Mostre o contedo do vetor depois de ter sido executada a primeira passagem do mtodo shell. O fator de incremento K=3.
24 4 8 14 90 8 67 27 45 19 91 99 58

2) No vetor apresentado a seguir, os dois primeiros elementos j foram classificados usando a ordenao por insero direta. Qual ser o valor dos outros elementos no vetor, depois de realizar mais 3 passagens do algoritmo de insero direta?
4 14 8 27 45 24 99 58

18

You might also like