Você está na página 1de 32

UNIDADE III PESQUISA E ORDENAO DE DADOS

Curso de Sistemas de Informao Disciplina de Estrutura de Dados Professora Madalena Pereira da Silva

Universidade do Planalto Catarinense

ORDENAO DE DADOS

Ordenao ou classificao de dados


Ordenar

dados (em ordem crescente ou decrescente) uma das aplicaes computacionais mais importantes. Praticamente todas as organizaes devem classificar algum dado e, em muitos casos, quantidades muito grandes de dados. Exemplos:
Ordenar

cartas de baralho Lista de convidados de uma grande festa Lista telefnica Nmero de candidatos polticos Dirio de classe etc

ORDENAO DE DADOS

o processo de ordenar os elementos pertencentes a uma estrutura de dados em ordem ascendente ou descendentes. Os fatores que influem na eficcia de um algoritmo de classificao so os seguintes:
O

nmero de registros a serem classificados; Se todos os registros cabero ou no na memria interna disponvel; O grau de classificao j existente; Forma como o algoritmo ir ordenar os dados;

ORDENAO DE DADOS

Leituras obrigatrias de Captulos de Livros


8. PUGA, S; RISSETTI, G. Lgica de programao e estruturas de dados, com aplicaes em Java. So Paulo: Prentice Hall, 2003. Captulo 18. HORSTMANN, C. Big Java. Porto Alegre: Bookman, 2004.
Captulo

Mtodos de Classificao de Dados

Existem trs mtodos gerais para ordenar/classificar dados (em arrays)


Insero

Direta Seleo Direta Troca (BubbleSort)

Mtodo de Insero Direta


Mtodo de classificao mais simples Normalmente utilizado para um conjunto pequeno de dados, pois apresenta baixa eficincia Divide o vetor em 2 segmentos:
o primeiro contendo os elementos j ordenados o segundo contendo os elementos ainda no ordenados

Funcionamento: pega o primeiro elemento do segmento no ordenado e procura seu lugar no segmento ordenado. No incio: o 1 segmento ter apenas 1 elemento

Mtodo de Insero Direta


Vetor original Diviso Inicial
29 17 23 12 7 15 2

29

17

23

12

15

Segmento Ordenado

Segmento No Ordenado

Primeira Iterao Segunda Iterao Terceira Iterao

29

17

23

12

15

29 29

17 17

23 23

12 12

7 7

15 15

2 2

...

Mtodo de Insero Direta


29 17 23 12 7 15 2

Segmento Ordenado (azul)

Segmento No Ordenado (telha)

[17, 29, 23, 12, 7, 15, 2] aps 1 interao [17, 23, 29, 12, 7, 15, 2] aps 2 interao [12, 17, 23, 29, 7, 15, 2] aps 3 interao [7, 12, 17, 23, 29, 15, 2] aps 4 interao [7, 12, 15, 17, 23, 29, 2] aps 5 interao [2, 7, 12, 15, 17, 23, 29] aps 6 interao

Exerccios: Mtodo de Insero Direta

Com base no que foi visto, construa um mtodo, em JAVA, que recebe um vetor de inteiros e o nmero de elementos neste vetor. Construa um novo mtodo static para ordenar o vetor implementando a lgica do algoritmo de SELEO DIRETA. Construa um novo mtodo static para imprimir os elementos do vetor. Analise os mtodos criados, veja em qual local pode ser impresso o resultado de cada iterao.

Algoritmo: Mtodo de Insero Direta


SOLUO, APENAS DO MTODO INSERCAO DIRETA

Mtodo de Troca- Bubblesort (Bolha)

Utiliza ordenao por troca. a ordenao mais conhecida, mais simples, porm uma das piores ordenaes j concebidas. Envolve repetidas comparaes e, se necessrio, a troca de dois elementos adjacentes. Os elementos so como bolhas em um tanque de gua cada uma procura o seu prprio nvel. Tome como exemplo um programa que ordena os elementos de um vetor ordem ascendente.

A tcnica passar vrias vezes pelo vetor. Em cada passada, so comparados pares sucessivos de elementos. Se um par estiver na ordem crescente ou se os valores forem iguais, os elementos so deixados como esto. Se um par estiver na ordem decrescente, os elementos so trocados de posio no vetor.

Mtodo de Troca- Bubblesort (Bolha)

Funcionamento: a idia bsica por trs do bubble sort percorrer a lista de chaves seqencialmente vrias vezes. Cada passagem consiste em comparar cada elemento na lista com seu sucessor e trocar os dois elementos se eles no estiverem na ordem correta. Ver exemplo para compreenso

Mtodo de Troca- Bubblesort (Bolha)

Exemplo: Suponha que se deseja classificar em ordem crescente o seguinte vetor de chaves:
28 26 30 24 25

Primeira Varredura

Mtodo de Troca- Bubblesort (Bolha)

Segundo Varredura

Terceira Varredura

Mtodo de Troca- Bubblesort (Bolha)

Considerando o seguinte vetor :


15 29 62 18 2 15 10

1) Em quantas varreduras o vetor classificado ? 2) Como identificar, a partir da ltima varredura, quantas chaves j esto classificadas?

Mtodo de Troca- Bubblesort (Bolha)

Primeira Varredura
29 29 29 29 29 29 29 62 62 62 18 18 18 18 18 18 18 62 2 2 2 2 2 2 2 62 27 27 27 27 27 27 27 62 10 10 10 10 10 10 10 62
compara par (15, 29) : no permuta compara par (29, 62) : no permuta compara par (62, 18) : permuta compara par (62, 2) : permuta compara par (62, 27) : permuta compara par (62, 10) : permuta Fim da varredura

15 15 15 15 15 15 15

Mtodo de Troca- Bubblesort (Bolha)

Segunda Varredura
29 29 18 18 18 18 18 18 18 29 2 2 2 2 2 2 2 29 27 27 27 27 27 27 27 29 10 10 10 10 10 10 10 29 29 62 62 62 62 62 62 62
compara par (15, 29) : no permuta compara par (29, 18) : permuta compara par (29, 2) : permuta compara par (29, 27) : permuta compara par (29, 10) : permuta compara par (29, 62) : no permuta Fim da varredura

15 15 15 15 15 15 15

Mtodo de Troca- Bubblesort (Bolha)

Terceira Varredura
18 18 2 2 2 2 2 2 2 18 18 18 18 18 27 27 27 27 10 10 10 10 10 10 10 27 27 27 29 29 29 29 29 29 29 62 62 62 62 62 62 62
compara par (15, 18) : no permuta compara par (18, 2) : permuta compara par (18, 27) : no permuta compara par (27, 10) : permuta compara par (27, 29) : no permuta compara par (29, 62) : no permuta Fim da varredura

15 15 15 15 15 15 15

Mtodo de Troca- Bubblesort (Bolha)

Quarta Varredura
2 15 15 15 15 15 15 18 18 18 10 10 10 10 10 10 10 18 18 18 18 27 27 27 27 27 27 27 29 29 29 29 29 29 29 62 62 62 62 62 62 62
compara par (15, 2) : permuta compara par (15, 18) : no permuta compara par (18, 10) : permuta compara par (18, 27) : no permuta compara par (27, 29) : no permuta compara par (29, 62) : no permuta Fim da varredura

15 2 2 2 2 2 2

Mtodo de Troca- Bubblesort (Bolha)

Quinta Varredura
15 15 10 10 10 10 10 10 10 15 15 15 15 15 18 18 18 18 18 18 18 27 27 27 27 27 27 27 29 29 29 29 29 29 29 62 62 62 62 62 62 62
compara par (2, 15) : no permuta compara par (15, 10) : permuta compara par (15, 18) : no permuta compara par (18, 27) : no permuta compara par (27, 29) : no permuta compara par (29, 62) : no permuta Fim da varredura

2 2 2 2 2 2 2

Mtodo de Troca- Bubblesort (Bolha)

Considerando o seguinte vetor :


15 29 62 18 2 15 10

1) Em quantas varreduras o vetor classificado ? 2) Como identificar, a partir da ltima varredura, quantas chaves j esto classificadas?
Observe que a quantidade de chaves, a partir da ltima, que pode ser ignorada de uma varredura para a outra conhecida pela posio na qual ocorreu a ltima troca. A partir daquele ponto o vetor j se encontra classificado!

Exerccio: Mtodo de Troca- Bubblesort

Com base no que foi visto, construa no mesmo projeto anterior, um mtodo em JAVA para ordenar um vetor de nmeros inteiros implementando a lgica do algoritmo de BUBLESORT. Observao1: no esquea de mostrar/imprimir os resultados (passo a passo da ordenao do vetor) em cada iterao. Observao2: no esquea de observar/debugar o seu cdigo, com base na seqncia de chaves (valores) inseridas, para responder as perguntas:
1) Em quantas varreduras o vetor classificado? 2) Como identificar, a partir da ltima varredura, quantas chaves j esto classificadas?

Algoritmo: Mtodo de Troca- Bubblesort


SOLUO, APENAS DO MTODO BUBBLESORT

Algoritmo: Mtodo de Troca- Bubblesort


SOLUO, APENAS DO MTODO BUBBLESORT

Mtodo de Seleo Direta

Princpio de classificao
a

seleo da menor chave feita por pesquisa seqencial a menor chave encontrada permutada com a que ocupa a posio inicial do vetor, que fica reduzido de um elemento o processo de seleo repetido para a parte restante do vetor, at que todas as chaves tenham sido selecionadas e colocadas em suas posies definitivas

Mtodo de Seleo Direta

1) 2)

Princpio do funcionamento Selecione o menor item do vetor (ou o maior) Troque-o com o item que est na primeira posio do vetor.
- Repita estas duas operaes com os n-1 itens restantes, depois com os n-2 itens, at que reste apenas um elemento.

Mtodo de Seleo Direta


Exerccio: Suponha que se deseja classificar o seguinte vetor: 9 25 10 18 5 7 15 3 Simule as iteraes necessrias para a classificao.

Mtodo de Seleo Direta

Exerccio: Mtodo de Seleo Direta

Com base no que foi visto, construa no mesmo projeto anterior, um mtodo em JAVA para ordenar o vetor implementando a lgica do algoritmo de SELEO DIRETA. Observaes: no esquea de mostrar/imprimir os resultados (passo a passo da ordenao do vetor) em cada iterao.

Algoritmo: Mtodo de Seleo Direta


SOLUO, APENAS DO MTODO SELEO DIRETA

Referncias Bibliogrficas
HORSTMANN, C. Big Java. Porto Alegre: Bookman, 2004. MAILLARD, P. J. Classificao de Dados. Notas de Aula de Programao II, UNISINOS. PREISS, B. R. Estruturas de Dados e Algoritmos. Rio de Janeiro: Campus, 2000. PUGA, S; R., G. Lgica de programao e estruturas de dados, com aplicaes em Java. So Paulo: Prentice Hall, 2003.

Exerccios

Alm dos exerccios solicitados ao longo dos slides, escolha um dos algoritmos de ordenao (insero, seleo ou troca), implementados de forma iterativa e faa a implementao, agora de forma recursiva. Volte ao seu projeto e crie um menu de opes para que o usurio possa selecionar qual dos mtodos deseja usar para ordenar os dados.

Você também pode gostar