INF1007: Programação 2 6 – Ordenação de Vetores

Slides:



Advertisements
Apresentações semelhantes
Busque o menor elemento no vetor Troque sua posição com o primeiro Repita a operação a partir do segundo elemento, até que reste apenas um elemento a ser.
Advertisements

Listas Lineares Estrutura que permite representar um conjunto de dados de forma a preservar a relação de ordem linear. Uma lista linear é composta de nós,
Linguagem de Programação IX Métodos de Ordenação
Algoritmos de Ordenação
Recursividade Prof. Rosana Palazon.
Algoritmos de Ordenação
David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP
David Menotti Estruturas de Dados I DECOM – UFOP
FACENS – Engenharia da Computação Lógica Computacional II
Ordenação Facilitar e aumentar a eficiência das operações de pesquisa sobre esses dados Pode ser crescente ou decrescente A seqüência de entrada, normalmente,
Ordenação Facilitar e aumentar a eficiência das operações de pesquisa sobre esses dados Pode ser crescente ou decrescente A seqüência de entrada, normalmente,
Algoritmos Escher.
Algoritmos de Ordenação
Algoritmos de Ordenação
Aux a fim início Simulação da execução de um algoritmo que troca o conteúdo de duas variáveis recebidas e apresenta o resultado da inversão: leia a,b a.
Algoritmos de Busca Parte II
Algoritmos e Estruturas de Dados II
Denise Guliato Faculdade de Computação – UFU
INTELIGÊNCIA ARTIFICIAL
Heap Sort TPA – Prof. Mateus Costa
Métodos de Ordenação e Busca
Estruturas de Dados Aula 9: Listas (parte 1)
Procedimentos e Funções
Algoritmos de Ordenação
Estruturas de Dados Aula 11: TAD Pilha
Estruturas de Dados Aula 15: Árvores
© 2011 Pearson Prentice Hall. Todos os direitos reservados.slide 1 © 2011 Pearson Prentice Hall. Todos os direitos reservados.slide 1 © 2011 Pearson Prentice.
Aula 10 Algoritmos de Busca
Capítulo VI – Variáveis Indexadas 6.1 – A necessidade de variáveis indexadas 6.2 – Vetores e matrizes 6.3 – Aplicações com vetores numéricos 6.4 – Aplicações.
DCC 001 Programação de Computadores 2º Semestre de 2011
Estruturas de Dados Aula 9 -2: Listas simplesmente encadeadas sem sentinela e sem cabeçalho 19/06/2013.
Estruturas de Dados Aula 10: Listas (parte 2) 07/05/2014.
CLASSIFICAÇÃO DE DADOS
USP – ICMC – SSC SSC0300 2º Semestre 2015
Campus Pau dos Ferros Disciplina de Algoritmos Prof. Demétrios Coutinho INFORMÁTICA BÁSICA Algoritmos de Ordenação.
Métodos de Pesquisa e Ordenação Estruturas de Dados Melissa Marchiani Palone Zanatta.
Resolução comentada do problema "Desordens" Prof. Adolfo Neto Departamento Acadêmico de Informática Universidade Tecnológica Federal do Paraná
INF1007: Programação 2 8 – Listas Encadeadas
CES-11 ALGORITMOS E ESTRUTURAS DE DADOS Aulas Práticas – 2017
Vetores e Matrizes em C/C++
INF1007: Programação 2 3 – Cadeias de Caracteres
Ordenação dos Elementos de um Vetor - Bubble Sort e Quick Sort .
INF1007: Programação 2 2 – Alocação Dinâmica
Estruturas de Decisão.
Algoritmos e Estruturas de Dados I
INF1007: Programação 2 5 – Tipos Estruturados
INF1007: Programação 2 1 – Ponteiros
Ordenação: Terminologia
INF1007 – Programação 2 9 – Pilhas
INF1007: Programação 2 9 – Tipos Abstratos de Dados
Algoritmos e Estruturas de Dados I
Métodos de Pesquisa e Ordenação
Capítulo VIII – Técnicas de Ordenação
INF1007: Programação Funções Recursivas
Fundamentos de Programação 1
FUNDAMENTO DE PROGRAMAÇÃO
Capítulo IV – Árvores Gerais
FEUP/LEEC Algoritmos e Estruturas de Dados 2001/2002
Métodos de Pesquisa e Ordenação
Árvores.
Capítulo IV – Árvores Gerais
CES-11 ALGORITMOS E ESTRUTURAS DE DADOS
Listas Encadeadas.
Aula 22 Modularização 22/10/08.
Pesquisa e Ordenação de Vetor
Complexidade de Algoritmos
Continuação.
Algoritmos de ordenação
Algoritmos de ordenação Estruturas avançadas de dados I
Aula 7 Professores: Conteúdo: Dante Corbucci Filho
Transcrição da apresentação:

INF1007: Programação 2 6 – Ordenação de Vetores 23/05/2018 (c) Dept. Informática - PUC-Rio

(c) Dept. Informática - PUC-Rio Tópicos Introdução Ordenação bolha (bubble sort) Ordenação por seleção (selection sort) 23/05/2018 (c) Dept. Informática - PUC-Rio

(c) Dept. Informática - PUC-Rio Introdução Ordenação de vetores: entrada: vetor com os elementos a serem ordenados saída: mesmo vetor com elementos na ordem especificada ordenação: pode ser aplicada a qualquer dado com ordem bem definida vetores com dados complexos (structs) chave da ordenação escolhida entre os campos elemento do vetor contém apenas um ponteiro para os dados troca da ordem entre dois elementos = troca de ponteiros 23/05/2018 (c) Dept. Informática - PUC-Rio

(c) Dept. Informática - PUC-Rio Ordenação Bolha Ordenação bolha: processo básico: quando dois elementos estão fora de ordem, troque-os de posição até que o i-ésimo elemento de maior valor do vetor seja levado para as posições finais do vetor continue o processo até que todo o vetor esteja ordenado Maior elemento 2º maior elemento 3º maior elemento v0 v1 v2 v3 4 2 5 1 3 v4 v5 2 4 1 5 3 v6 2 1 4 5 3 23/05/2018 (c) Dept. Informática - PUC-Rio

(c) Dept. Informática - PUC-Rio Ordenação Bolha 25 48 37 12 57 86 33 92 25x48 25 48 37 12 57 86 33 92 48x37 troca 25 37 48 12 57 86 33 92 48x12 troca 25 37 12 48 57 86 33 92 48x57 25 37 12 48 57 86 33 92 57x86 25 37 12 48 57 86 33 92 86x33 troca 25 37 12 48 57 33 86 92 86x92 25 37 12 48 57 33 86 92 final da primeira passada o maior elemento, 92, já está na sua posição final 23/05/2018 (c) Dept. Informática - PUC-Rio

(c) Dept. Informática - PUC-Rio Ordenação Bolha 25 37 12 48 57 33 86 92 25x37 25 37 12 48 57 33 86 92 37x12 troca 25 12 37 48 57 33 86 92 37x48 25 12 37 48 57 33 86 92 48x57 25 12 37 48 57 33 86 92 57x33 troca 25 12 37 48 33 57 86 92 57x86 25 12 37 48 33 57 86 92 final da segunda passada o segundo maior elemento, 86, já está na sua posição final 23/05/2018 (c) Dept. Informática - PUC-Rio

(c) Dept. Informática - PUC-Rio Ordenação Bolha 25 12 37 48 33 57 86 92 25x12 troca 12 25 37 48 33 57 86 92 25x37 12 25 37 48 33 57 86 92 37x48 12 25 37 48 33 57 86 92 48x33 troca 12 25 37 33 48 57 86 92 48x57 12 25 37 33 48 57 86 92 final da terceira passada Idem para 57. 12 25 37 33 48 57 86 92 12x25 12 25 37 33 48 57 86 92 25x37 12 25 37 33 48 57 86 92 37x33 troca 12 25 33 37 48 57 86 92 37x48 12 25 33 37 48 57 86 92 final da quarta passada Idem para 48. 23/05/2018 (c) Dept. Informática - PUC-Rio

(c) Dept. Informática - PUC-Rio 12 25 33 37 48 57 86 92 12x25 12 25 33 37 48 57 86 92 25x33 12 25 33 37 48 57 86 92 33x37 12 25 33 37 48 57 86 92 final da quinta passada Idem para 37. 12 25 33 37 48 57 86 92 final da sexta passada Idem para 33. 12 25 33 37 48 57 86 92 final da sétima passada Idem para 25 e, conseqüentemente, 12. 12 25 33 37 48 57 86 92 final da ordenação 23/05/2018 (c) Dept. Informática - PUC-Rio

(c) Dept. Informática - PUC-Rio Ordenação Bolha Implementação Iterativa (I): /* Ordenação bolha */ void bolha (int n, int* v) { int fim,i; for (fim=n-1; fim>0; fim--) for (i=0; i<fim; i++) if (v[i]>v[i+1]) { int temp = v[i]; /* troca */ v[i] = v[i+1]; v[i+1] = temp; } maior elemento (n=4; fim=n-1=3) 4 2 5 1 2º maior elemento (fim=n-2=2) 2 4 1 5 3º maior elemento (fim=n-3=1) 2 1 4 5 3 23/05/2018 (c) Dept. Informática - PUC-Rio

(c) Dept. Informática - PUC-Rio Ordenação Bolha Implementação Iterativa (II): /* Ordenação bolha (2a. versão) */ void bolha (int n, int* v) { int fim,i; for (fim=n-1; fim>0; fim--) { int troca = 0; for (i=0; i<fim; i++) if (v[i]>v[i+1]) { int temp = v[i]; /* troca */ v[i] = v[i+1]; v[i+1] = temp; troca = 1; } if (troca == 0) return; /* não houve troca */ pára quando há uma passagem inteira sem trocas 23/05/2018 (c) Dept. Informática - PUC-Rio

(c) Dept. Informática - PUC-Rio Ordenação Bolha Esforço computacional: esforço computacional  número de comparações  número máximo de trocas primeira passada: n-1 comparações segunda passada: n-2 comparações terceira passada: n-3 comparações ... tempo total gasto pelo algoritmo: T proporcional a (n-1) + (n-2) + ... + 2 + 1 = (n-1+1)*(n-1) / 2 = n*(n-1) / 2 algoritmo de ordem quadrática: O(n2) 23/05/2018 (c) Dept. Informática - PUC-Rio

(c) Dept. Informática - PUC-Rio Ordenação Bolha Implementação recursiva: /* Ordenação bolha recursiva */ void bolha_rec (int n, int* v) { int i; int troca = 0; for (i=0; i<n-1; i++) if (v[i]>v[i+1]) { int temp = v[i]; /* troca */ v[i] = v[i+1]; v[i+1] = temp; troca = 1; } if (troca != 0) && (n>1) /* houve troca */ bolha_rec(n-1,v); maior elemento bolha_rec(4,v); 4 2 5 1 2º maior elemento bolha_rec(3,v); 2 4 1 5 3º maior elemento bolha_rec(2,v); 2 1 4 5 3 23/05/2018 (c) Dept. Informática - PUC-Rio

(c) Dept. Informática - PUC-Rio Ordenação Bolha Algoritmo genérico (I): independente dos dados armazenados no vetor usa uma função auxiliar para comparar elementos /* Função auxiliar de comparação */ static int compara (int a, int b) { if (a > b) return 1; else return 0; } 23/05/2018 (c) Dept. Informática - PUC-Rio

(c) Dept. Informática - PUC-Rio Ordenação Bolha /* Ordenação bolha (3a. versão) */ void bolha (int n, int* v) { int fim, i; for (fim=n-1; fim>0; fim--) { int troca = 0; for (i=0; i<fim; i++) if (compara(v[i],v[i+1])) { int temp = v[i]; /* troca */ v[i] = v[i+1]; v[i+1] = temp; troca = 1; } if (troca == 0) /* não houve troca */ return; 23/05/2018 (c) Dept. Informática - PUC-Rio

(c) Dept. Informática - PUC-Rio Ordenação Por Seleção Ordenação por seleção (“selection sort”): consiste em uma seleção sucessiva do menor/ maior valor contido na parte ainda desordenada dos elementos A cada iteração, encontra-se a posição do maior valor na parte não ordenada do vetor, colocando-o na posição final da parte não ordenada do vetor. Enquanto há elementos no segmento desordenado do vetor Encontra o maior valor do segmento desordenado Troca o elemento final do segmento desordenado c/o maior “Move” a posição final do segmento desordenado para o inicio do segmento ordenado fim_enquanto   23/05/2018 (c) Dept. Informática - PUC-Rio

(c) Dept. Informática - PUC-Rio Ordenação Por Seleção void selecao (int *v, int n) { int fim, i, maior; int aux; for (fim=n-1; fim>0; fim--) maior = 0; for(i=1;i<=fim;i++) if (v[i]>v[maior]) maior =i; aux=vet[fim]; vet[fim]=vet[maior]; vet[maior]=aux; } 23/05/2018 (c) Dept. Informática - PUC-Rio

(c) Dept. Informática - PUC-Rio 23/05/2018 (c) Dept. Informática - PUC-Rio

(c) Dept. Informática - PUC-Rio Resumo Bubble sort quando dois elementos estão fora de ordem, troque-os de posição até que o i-ésimo elemento de maior valor do vetor seja levado para as posições finais do vetor continue o processo até que todo o vetor esteja ordenado Selection sort A cada iteração, encontra-se a posição do maior valor na parte não ordenada do vetor, colocando-o na posição final da parte não ordenada do vetor. 23/05/2018 (c) Dept. Informática - PUC-Rio

(c) Dept. Informática - PUC-Rio Referências Waldemar Celes, Renato Cerqueira, José Lucas Rangel, Introdução a Estruturas de Dados, Editora Campus (2004) Capítulo 16 – Ordenação 23/05/2018 (c) Dept. Informática - PUC-Rio