Escolar Documentos
Profissional Documentos
Cultura Documentos
Curso de Sistemas de Informao Disciplina de Estrutura de Dados Professora Madalena Pereira da Silva
ORDENAO DE DADOS
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
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
29
17
23
12
15
Segmento Ordenado
Segmento No Ordenado
29
17
23
12
15
29 29
17 17
23 23
12 12
7 7
15 15
2 2
...
[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
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.
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.
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
Exemplo: Suponha que se deseja classificar em ordem crescente o seguinte vetor de chaves:
28 26 30 24 25
Primeira Varredura
Segundo Varredura
Terceira Varredura
1) Em quantas varreduras o vetor classificado ? 2) Como identificar, a partir da ltima varredura, quantas chaves j esto classificadas?
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
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
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
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
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
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!
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?
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
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.
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.
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.