CES11 ALGORITMOS E ESTRUTURAS DE DADOS Captulo VIII
- Slides: 67
CES-11 ALGORITMOS E ESTRUTURAS DE DADOS Capítulo VIII Técnicas de Ordenação e Procura
Capítulo VIII – Técnicas de Ordenação e Procura 8. 1 – Introdução 8. 2 – Métodos simples de ordenação 8. 3 – O método Quick-Sort 8. 4 – O método Heap-Sort 8. 5 – O método Merge-Sort 8. 6 – Tabelas Hash
8. 1 – Introdução n Ordenação é uma atividade importantíssima em processamento automático de informações n Que tal procurar Um nome numa lista telefônica - Um nome numa lista de contas bancárias - Uma palavra em um dicionário linguístico - se os nomes ou palavras não estiverem em ordem alfabética?
n O processo de ordenação se aplica a um conjunto de objetos em que se possa verificar entre eles a relação (menor ou igual), ou (maior ou igual) n Os conjuntos mais comuns são vetores de Números - Nomes ou strings em geral -
n Vetores de estruturas também podem ser ordenados n Exemplo: relação com diversas informações sobre os funcionários de uma empresa:
n Este vetor pode ser ordenado por qualquer campo dessas estruturas: Ordem alfabética dos nomes ou dos setores - Ordem crescente ou decrescente de salários ou de idade - n O campo de um vetor de estruturas usado para ordená-lo é denominado chave da ordenação
n Existem vários algoritmos para fazer ordenação de vetores: - n Alguns mais simples, porém ineficientes Outros mais eficientes, porém mais complexos Alguns critérios para julgar a eficiência dos algoritmos de ordenação: - Número de comparações de chaves Número de movimentações de elementos
n O tempo de comparação depende da chave usada: - n Para números, basta um dos operadores ou ; Para strings, usa-se funções para compará-las; exemplo: strcmp da linguagem C Há casos de chaves múltiplas, como a ordenação por idade, sendo dada a data de nascimento: - Compara-se primeiramente o ano, depois o mês e finalmente o dia Nestes casos, a comparação é mais complexa e pode ser conveniente um subprograma específico
n O tempo de movimentação depende do tipo e tamanho dos elementos do vetor a ser ordenado: - Para números, a movimentação é pequena - Para grandes estruturas, há grande movimentação de dados
n No caso de grandes estruturas, usa-se um vetor de ponteiros, cada um para uma estrutura do vetor Pont 1 2 3 4 5 6 7 8 Nome Setor Salário Gilberto Antonio Data de Nascimento Dia Mês Ano 03 05 1980 05 12 1970 Almox Admin 850 2300 Pedro Augusto Claudio Marcos Nilton Vicente 23 05 07 17 20 15 Fabric Diret Ferram Recep Proj Contr 1050 8000 1850 2300 2000 07 10 03 11 01 08 1975 1960 1984 1976 1982 1979
n Para a ordenação basta alterar os apontamentos, evitando-se a movimentação dessas estruturas Pont 1 2 3 4 5 6 7 8 Nome Setor Salário Gilberto Antonio Data de Nascimento Dia Mês Ano 03 05 1980 05 12 1970 Almox Admin 850 2300 Pedro Augusto Claudio Marcos Nilton Vicente 23 05 07 17 20 15 Fabric Diret Ferram Recep Proj Contr 1050 8000 1850 2300 2000 07 10 03 11 01 08 1975 1960 1984 1976 1982 1979
n No restante deste capítulo, para maior simplicidade, os algoritmos irão atuar sobre vetores de inteiros n A seguinte declaração será usada por esses algoritmos: typedef int vetor [nmax] (nmax é o número máximo de elementos dos vetores) n Para vetores de outros tipos, basta alterar as comparações e os movimentos de elementos n São apresentados a seguir três métodos simples de ordenação e, depois, três outros mais eficientes
Capítulo VIII – Técnicas de Ordenação e Procura 8. 1 – Introdução 8. 2 – Métodos simples de ordenação 8. 3 – O método Quick-Sort 8. 4 – O método Heap-Sort 8. 5 – O método Merge-Sort 8. 6 – Tabelas Hash
8. 2 – Métodos Simples de Ordenação n Tais métodos são considerados lentos (0(n 2) no pior caso e no caso médio) n São usados para ordenar vetores pequenos n São apresentados aqui três desses métodos: Bubble-Sort - Insertion-Sort - Selection-Sort -
8. 2. 1 – Bubble-Sort n O método consiste em: - Percorrer o vetor várias vezes - Durante cada percurso, efetuar troca de posição de elementos adjacentes, caso o elemento da esquerda seja maior que o da direita - Se, durante um dos percursos, não houver trocas, considera-se que o vetor está ordenado - Em cada percurso, um elemento atinge sua posição definitiva
Exemplo: seja o seguinte vetor e o método em seu início (cursor para i percorrer o vetor várias vezes) V 0 1 2 16 45 72 3 5 4 8 5 6 7 8 9 67 95 74 70 80 p (limitante de i a cada percurso) trocou (semáforo que acende quando há troca)
Não trocar i V 0 1 2 16 45 72 3 5 4 8 5 6 7 8 9 67 95 74 70 80 p trocou
Não trocar i V 0 1 2 16 45 72 3 5 4 8 5 6 7 8 9 67 95 74 70 80 p trocou
Trocar i V 0 1 2 16 45 72 3 5 4 8 5 6 7 8 9 67 95 74 70 80 p trocou
Trocar i V 0 1 16 45 2 5 3 72 4 8 5 6 7 8 9 67 95 74 70 80 p trocou
Trocar i V 0 1 16 45 2 5 3 8 4 5 6 7 8 9 72 67 95 74 70 80 p trocou
Não trocar i V 0 1 16 45 2 5 3 8 4 5 6 7 8 9 67 72 95 74 70 80 p trocou
Trocar i V 0 1 16 45 2 5 3 8 4 5 6 7 8 9 67 72 95 74 70 80 p trocou
Trocar i V 0 1 16 45 2 5 3 8 4 5 6 7 8 9 67 72 74 95 70 80 p trocou
Trocar i V 0 1 16 45 2 5 3 8 4 5 6 7 8 9 67 72 74 70 95 80 p trocou
95 em sua posição definitiva trocou acesa: começar novo percurso retroceder p V 0 1 16 45 2 5 3 8 4 5 6 7 8 9 67 72 74 70 80 95 p trocou A variável cursora ‘i’ não precisa chegar até V[8] Basta chegar até V[7]
Não trocar i V 0 1 16 45 2 5 3 8 4 5 6 7 8 9 67 72 74 70 80 95 p trocou
Trocar i V 0 1 16 45 2 5 3 8 4 5 6 7 8 9 67 72 74 70 80 95 p trocou
Trocar i V 0 16 1 5 2 45 3 8 4 5 6 7 8 9 67 72 74 70 80 95 p trocou
Não trocar i V 0 16 1 5 2 8 3 4 5 6 7 8 9 45 67 72 74 70 80 95 p trocou
Não trocar i V 0 16 1 5 2 8 3 4 5 6 7 8 9 45 67 72 74 70 80 95 p trocou
Não trocar i V 0 16 1 5 2 8 3 4 5 6 7 8 9 45 67 72 74 70 80 95 p trocou
Trocar i V 0 16 1 5 2 8 3 4 5 6 7 8 9 45 67 72 74 70 80 95 p trocou
Não trocar i V 0 16 1 5 2 8 3 4 5 6 7 8 9 45 67 72 70 74 80 95 p trocou
80 em sua posição definitiva trocou acesa: iniciar novo percurso retroceder p V 0 16 1 5 2 8 3 4 5 6 7 8 9 45 67 72 70 74 80 95 p trocou
Trocar i V 0 16 1 5 2 8 3 4 5 6 7 8 9 45 67 72 70 74 80 95 p trocou
Trocar i V 0 5 1 16 2 8 3 4 5 6 7 8 9 45 67 72 70 74 80 95 p trocou
Não trocar i V 0 5 1 8 2 3 4 5 6 7 8 9 16 45 67 72 70 74 80 95 p trocou
Não trocar i V 0 5 1 8 2 3 4 5 6 7 8 9 16 45 67 72 70 74 80 95 p trocou
Não trocar i V 0 5 1 8 2 3 4 5 6 7 8 9 16 45 67 72 70 74 80 95 p trocou
Trocar i V 0 5 1 8 2 3 4 5 6 7 8 9 16 45 67 72 70 74 80 95 p trocou
Não trocar i V 0 5 1 8 2 3 4 5 6 7 8 9 16 45 67 70 72 74 80 95 p trocou
74 em sua posição definitiva trocou acesa: novo percurso retroceder p V 0 5 1 8 2 3 4 5 6 7 8 9 16 45 67 70 72 74 80 95 p trocou
Não trocar i V 0 5 1 8 2 3 4 5 6 7 8 9 16 45 67 70 72 74 80 95 p trocou
Não trocar i V 0 5 1 8 2 3 4 5 6 7 8 9 16 45 67 70 72 74 80 95 p trocou
Não trocar i V 0 5 1 8 2 3 4 5 6 7 8 9 16 45 67 70 72 74 80 95 p trocou
Não trocar i V 0 5 1 8 2 3 4 5 6 7 8 9 16 45 67 70 72 74 80 95 p trocou
Não trocar i V 0 5 1 8 2 3 4 5 6 7 8 9 16 45 67 70 72 74 80 95 p trocou
Não trocar i V 0 5 1 8 2 3 4 5 6 7 8 9 16 45 67 70 72 74 80 95 p trocou
72 em sua posição definitiva trocou apagada: vetor ordenado V 0 5 1 8 2 3 4 5 6 7 8 9 16 45 67 70 72 74 80 95 p trocou
V 0 5 1 8 2 3 4 5 6 7 8 9 16 45 67 70 72 74 80 95
A função Bubble. Sort: void Bubble. Sort (int n, vetor V) { int i, p; logic trocou; for (p = n-2, trocou = TRUE; p >= 0 && trocou; p--) for (trocou = FALSE, i = 0; i <= p; i++) if (V[i] > V[i+1]) { Trocar (&V[i], &V[i+1]); trocou = TRUE; } } A cada vez que a condição do if se void Trocar (int *x, int *y) { verificar, haverá int temp; movimentação de 3 temp = *x; *x = *y; *y = temp; elementos }
5. 2. 2 – Insertion-Sort n O método considera o vetor sempre dividido em duas partes: a parte ordenada, do lado esquerdo, e a parte desordenada, do lado direito n Inicialmente, a parte ordenada contém apenas V[0]; depois, cada elemento da parte desordenada é inserido na parte ordenada, mantendo a ordenação n A cada elemento a ser inserido, percorre-se a parte ordenada até encontrar a posição correta para inserção
Exemplo: seja o vetor abaixo e o método no início da inserção de um elemento genérico i V 0 5 1 2 3 16 45 72 (cursor para percorrer a parte ordenada) 4 8 (cursor para o elemento a ser inserido) 5 6 7 8 9 67 95 74 70 80 j Parte ordenada Parte desordenada aux 8 aux = V[i]
aux < V[j]: V[j+1] recebe V[j]; retroceder j i V 0 5 1 2 3 16 45 72 4 8 5 6 7 8 9 67 95 74 70 80 j Parte ordenada Parte desordenada aux 8 aux = V[i]
aux < V[j]: V[j+1] recebe V[j]; retroceder j i V 0 5 1 2 3 4 5 6 7 8 9 16 45 72 72 67 95 74 70 80 j j Parte ordenada Parte desordenada aux 8 aux = V[i]
aux < V[j]: V[j+1] recebe V[j]; retroceder j i V 0 5 1 2 3 4 5 6 7 8 9 16 45 45 72 67 95 74 70 80 j j Parte ordenada Parte desordenada aux 8 aux = V[i]
aux >= V[j]: V[j+1] recebe aux; avançar a parte ordenada i V 0 5 1 2 3 4 5 6 7 8 9 16 16 45 72 67 95 74 70 80 j j Parte ordenada Parte desordenada aux 8 aux = V[i]
i V 0 5 1 8 i 2 3 4 5 6 7 8 9 16 45 72 67 95 74 70 80 j Parte ordenada aux Parte desordenada 8 aux = V[i] O mesmo se repete até que tudo fique ordenado
A função Insertion. Sort: void Insertion. Sort (int n, vetor V) { int i, j, aux; logic achou; for (i = 1; i < n; i++) { aux = V[i]; achou = FALSE; j = i-1; while (j >= 0 && !achou) if (aux < V[j]) { A cada vez que a condição V[j+1] = V[j]; do if se verificar, haverá j--; movimentação de 1 } elemento else achou = TRUE; Antes e depois do while, if (j+1 != i) mais uma movimentação V[j+1] = aux; } }
5. 2. 3 – Selection-Sort n O método consiste em percorrer o vetor várias vezes n Durante cada percurso, seleciona o menor elemento, colocando-o em sua posição definitiva
Exemplo: seja o vetor abaixo e o método em seu início i V (cursor na posição de colocação do menor elemento do percurso) 0 1 2 16 45 72 3 5 4 8 5 6 7 8 9 67 95 74 70 80 (cursor para percorrer o vetor várias j vezes, para encontrar o menor elemento do percurso) indmin (destinado a guardar o índice do menor elemento de um percurso)
Após o 1º percurso: indmin i: trocar V[i] com V[indmin]; avançar i i V 0 1 2 16 45 72 3 5 4 8 indmin 3 5 6 7 8 9 67 95 74 70 80
Após o 2º percurso: indmin i: trocar V[i] com V[indmin]; avançar i; i V 0 5 i 1 2 3 45 72 16 4 8 indmin 3 4 5 6 7 8 9 67 95 74 70 80
Após o 3º percurso: indmin i: trocar V[i] com V[indmin]; avançar i; i V 0 5 1 8 i 2 3 4 5 6 7 8 9 72 16 45 67 95 74 70 80 indmin 3 4
i V 0 5 1 8 i 2 3 4 5 6 7 8 9 16 72 45 67 95 74 70 80 indmin 3 E assim por diante, até que o vetor fique ordenado
A função Selection. Sort: void Selection. Sort (int n, vetor V) { int i, j, indmin; for (i = 0; i < n-1; i++) { indmin = i; for (j = i+1; j <= n-1; j++) if (V[j] < V[indmin]) indmin = j; se (indmin != i) Trocar (&V[i], &V[indmin]); } Só ocorre movimentação } de elementos quando o índice do menor for encontrado
- Https://slidetodoc.com/captulo-2-o-sudeste-e-o-sul-do/
- Https://slidetodoc.com/captulo-2-o-sudeste-e-o-sul-do/
- Série estatística conjugada
- Cerebelo
- Estruturas homólogas e análogas
- Funcionograma
- Estrutura do sistema respiratório
- Estruturas sensoriais
- Estrutura da terra e relevo
- Teoria das estruturas
- Estruturas naturais e artificiais
- Oração subordinada copulativa
- A polis grega possuia estruturas que acomodavam
- Mecanismo de frank starling
- órgãos vestigiais
- Estabilidade das estruturas
- Mapa das estruturas geologicas do brasil
- Estruturas estaticamente indeterminadas
- Teoria das estruturas
- Estruturas naturais e artificiais
- Flambagem
- Estruturas resistentes
- Imagens de formas de relevo
- Forma de aço para concreto
- Oi eu sou alice
- Tecido
- Viga de gerber
- Estruturas sequenciais
- Esforos
- Faustino viii
- Prvky 18. skupiny
- Cn viii
- Domingo viii tiempo ordinario ciclo c
- Roma siglo viii a.c
- Navarea viii warnings
- Mapa mental formação dos estados nacionais
- How to remember henry viii wives
- Henryk viii
- Canto 7 paradiso
- Csric viii
- Henry viii great matter
- Harri viii
- Vestibulo coclear
- Henry viii foreign policy 1509-1529
- Részei
- Luther calvin and henry viii
- Raport simulare evaluare nationala matematica
- Domingo viii tiempo ordinario ciclo c
- Viii encuentro nacional de catalogadores
- Standards governing the use of simulators diatur dalam
- Cranial nerve assessment
- Circular unica sic titulo viii
- Jnc 8
- Cn viii
- Viii henrik feleségei
- Did henry viii divorce catherine of aragon
- Henry viii banquet menu
- Henry viii wives executed
- Reflexões do poeta canto viii
- History of roman numerals
- Cn viii
- Tr. corticospinalis
- Gutenberg printing press ap world history
- En 13445 vs asme viii
- Code of ethics for professional teachers section 7
- Viii
- Bahaya xenon
- Henry viii deathbed painting