INF1007: Programação 2 6 Ordenação de Vetores. 01/10/2015 (c) Dept. Informática - PUC-Rio 1

Documentos relacionados
Programação de Computadores II. Cap. 16 Ordenação

Módulo 16 - Ordenação

Linguagem C: Ordenação

Módulo 16 - Ordenação. Referências

INF 1007 Programação II

Exercícios Capítulos 5 e 6

Estruturas de Dados. Módulo 17 - Busca. 2/6/2005 (c) Dept. Informática - PUC-Rio 1

Programação de Computadores II. Cap. 17 Busca

INF1007: Programação 2 7 Busca em Vetores. 01/04/2014 (c) Dept. Informática - PUC-Rio 1

Algoritmos e Programação de Computadores Profs: Ronaldo Castro de Oliveira Anilton Joaquim da Silva

Projeto e Análise de Algoritmos

INF1007: Programação 2 8 Listas Encadeadas. (c) Dept. Informática - PUC-Rio 1

Programação II. Ordenação (sort) Bruno Feijó Dept. de Informática, PUC-Rio

ÁRVORES ABB (ÁRVORES BINÁRIAS DE BUSCAS) Sérgio Carlos Portari Júnior

Programação de Computadores II. Cap. 4 Funções

Estruturas de Dados. Módulo 12 - Filas. 9/8/2005 (c) Dept. Informática - PUC-Rio 1

Estruturas de Dados. Módulo 4 Funções. 9/8/2005 (c) Dept. Informática - PUC-Rio 1

Módulo 14 - Estruturas genéricas

INF1007: Programação 2. 2 Alocação Dinâmica. 17/02/2014 (c) Dept. Informática - PUC-Rio 1

Instituto de C. Filas. Luis Martí Instituto de Computação Universidade Federal Fluminense -

Computadores Digitais 2. Prof. Rodrigo de Souza Couto

INF1007: Programação Funções Recursivas. 12/03/2014 (c) Dept. Informática - PUC-Rio 1

Módulo 5 Vetores e Alocação Dinâmica

CURSO DE ESTRUTURA DE DADOS MÓDULO: ALGORITMOS DE ORDENAÇÃO E PESQUISA PROFESSORA: DANIELA ELOISE FLÔR COLABORADORA: MARIA CAROLINA SILA VANUCHI

INF 1007 Programação II

Programação de Computadores II. Cap. 5 Vetores

INF111 Programação II Aulas 11, 12, 13 Ordenação

INF1007 Programação 2 9 Pilhas. (c) Dept. Informática - PUC-Rio 1

Estruturas de Dados. Módulo 6 Matrizes. 9/8/2005 (c) Dept. Informática - PUC-Rio 1

Módulo 10 Listas Encadeadas

Programação II. Busca em Vetor (search) Bruno Feijó Dept. de Informática, PUC-Rio

Marcelo Keese Albertini Faculdade de Computação Universidade Federal de Uberlândia

MÉTODOS DE ORDENAÇÃO. Introdução à Programação SI2

Instituto de C. Linguagem C: Listas. Luis Martí Instituto de Computação Universidade Federal Fluminense -

ÁRVORES BINÁRIAS DE BUSCA. Vanessa Braganholo Estruturas de Dados e Seus Algoritmos

ALGORITMOS DE ORDENAÇÃO RECURSIVOS

Trabalho: Algoritmos de Busca e Ordenação. 1 Introdução. Prof. Bruno Emerson Gurgel Gomes IFRN - Câmpus Currais Novos. 31 de outubro de 2012

Métodos de Classificação

Programação II. Ordenação (sort) Bruno Feijó Dept. de Informática, PUC-Rio

MÉTODOS DE ORDENAÇÃO DE DADOS EM MEMÓRIA PRIMÁRIA. Material da Prof. Ana Eliza

Introdução à Programação

DAINF - Departamento de Informática

REVISÃO DE C. Vanessa Braganholo Estruturas de Dados e Seus Algoritmos

CES-11. Noções de complexidade de algoritmos. Complexidade de algoritmos. Avaliação do tempo de execução. Razão de crescimento desse tempo.

CES-11. Algoritmos e Estruturas de Dados. Carlos Alberto Alonso Sanches Juliana de Melo Bezerra

MÉTODOS DE ORDENAÇÃO. Introdução à Programação SI1

BCC202 - Estrutura de Dados I

Estruturas de Dados. Módulo 11 Pilhas. 9/8/2005 (c) Dept. Informática - PUC-Rio 1

Exemplo. Lista Inicial (Desordenada) a. Iteração: Pivô: 25. Elemento da Esquerda: 48 Elemento da Direita: 12

Métodos de ordenação. Bubble sort:

Fabrício J. Barth. BandTec - Faculdade de Tecnologia Bandeirantes

Estruturas de Dados Aula 12: Outras Implementações de Listas 18/04/2011

Métodos de Ordenação: Selection, Insertion, Bubble, Merge (Sort)

Linguagem C: Algoritmos de Ordenação

Fontes Bibliográficas. Listas Circulares. Função Imprime

Cadeias de Caracteres (Strings)

Estrutura de Dados. Algoritmos de Ordenação. Prof. Othon M. N. Batista Mestre em Informática

Módulo 7 Cadeias de Caracteres

Módulo 18 - Tabelas de Dispersão. Referências

O Problema da Ordenação Métodos de Ordenação Parte 1

Análise e Complexidade de Algoritmos

INF1007: Programação 2 10 Árvores Binárias. (c) Dept. Informática - PUC-Rio 1

Os métodos de ordenação que ordenam os elementos in situ podem ser classificados em três principais categorias:

Estruturas de Dados Filas

ALGORITMOS E ESTRUTURAS DE DADOS CES-11

Fontes Bibliográficas. Estruturas de Dados Aula 15: Árvores. Livros:

BCC202 - Estrutura de Dados I

Computadores Digitais 2. Prof. Rodrigo de Souza Couto

Pesquisa e Ordenação

INF 1010 Estruturas de Dados Avançadas

Listas Encadeadas. Fabrício J. Barth. BandTec - Faculdade de Tecnologia Bandeirantes

1. O que é a eficiência assintótica de um algoritmo. Explique com suas palavras.

Módulo 3 Controle de Fluxo

2. Ordenação por Seleção

Métodos de Classificação

Algoritmos de Ordenação

Ordenação: Heapsort. Algoritmos e Estruturas de Dados II

ALGORITMOS DE ORDENAÇÃO

ESTRUTURA DE DADOS (TCC )

Algoritmos de Busca em Vetores

Universidade Federal do ABC Avaliação Disciplina Turma Professor Data Instruções para a prova (leia antes de começar): SelectionSort selectonsortrec

Aula T19 BCC202 Pesquisa (Parte 1) Pesquisa Binária. Túlio Toffolo

Busca. Fabrício J. Barth. BandTec - Faculdade de Tecnologia Bandeirantes

Ordenação: QuickSort. Prof. Túlio Toffolo BCC202 Aula 15 Algoritmos e Estruturas de Dados I

Heaps. Estrutura de Dados. Universidade Federal de Juiz de Fora Departamento de Ciência da Computação 1 / 35

Estruturas de Dados Aula 17: Estruturas Genéricas 15/06/2011

UNIVERSIDADE DA BEIRA INTERIOR

Programação II. Tópicos Extras Ordenação (sort) Bruno Feijó Dept. de Informática, PUC-Rio

Revisão: Tipo Abstrato de Dados Recursividade

INF1007: Programação 2. 0 Revisão. 06/08/2015 (c) Dept. de Informática - PUC-Rio 1

Ordenação por Seleção Métodos de Ordenação Parte 3

Métodos de Ordenação

Análise de complexidade

Cap. 3 Entrada e Saída e Controle de Fluxo

Algoritmos de pesquisa

Medida do Tempo de Execução de um Programa. Bruno Hott Algoritmos e Estruturas de Dados I DECSI UFOP

ESTRUTURAS DE DADOS E ALGORITMOS ALGORITMOS DE ORDENAÇÃO POR COMPARAÇÃO - II

MAC121 ALGORITMOS E ESTRUTURAS DE DADOS I 2O. SEMESTRE DE 2017

Transcrição:

INF1007: Programação 2 6 Ordenação de Vetores 01/10/2015 (c) Dept. Informática - PUC-Rio 1

Tópicos Introdução Ordenação bolha (bubble sort) Ordenação por seleção (selection sort) 01/10/2015 (c) Dept. Informática - PUC-Rio 2

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 01/10/2015 (c) Dept. Informática - PUC-Rio 3

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 2 4 5 1 2 4 5 1 2 4 1 5 v4 v5 2 4 1 5 2 4 1 5 2 1 4 5 0 1 2 3 v6 2 1 4 5 1 2 4 5 0 1 2 3 0 1 2 3 01/10/2015 (c) Dept. Informática - PUC-Rio 4

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 01/10/2015 (c) Dept. Informática - PUC-Rio 5

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 01/10/2015 (c) Dept. Informática - PUC-Rio 6

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. 01/10/2015 (c) Dept. Informática - PUC-Rio 7

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 12x25 12 25 33 37 48 57 86 92 25x33 12 25 33 37 48 57 86 92 final da sexta passada Idem para 33. 12 25 33 37 48 57 86 92 12x25 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 01/10/2015 (c) Dept. Informática - PUC-Rio 8

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) 2º maior elemento (fim=n-2=2) 3º maior elemento (fim=n-3=1) 4 2 5 1 2 4 5 1 2 4 5 1 2 4 1 5 2 4 1 5 2 4 1 5 2 1 4 5 2 1 4 5 1 2 4 5 0 1 2 3 01/10/2015 (c) Dept. Informática - PUC-Rio 9

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 01/10/2015 (c) Dept. Informática - PUC-Rio 10

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(n 2 ) 01/10/2015 (c) Dept. Informática - PUC-Rio 11

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); 2º maior elemento bolha_rec(3,v); 3º maior elemento bolha_rec(2,v); 4 2 5 1 2 4 5 1 2 4 5 1 2 4 1 5 2 4 1 5 2 4 1 5 2 1 4 5 2 1 4 5 1 2 4 5 0 1 2 3 01/10/2015 (c) Dept. Informática - PUC-Rio 12

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; 01/10/2015 (c) Dept. Informática - PUC-Rio 13

/* 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; 01/10/2015 (c) Dept. Informática - PUC-Rio 14

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 01/10/2015 (c) Dept. Informática - PUC-Rio 15

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; Ordenação Por Seleção 01/10/2015 (c) Dept. Informática - PUC-Rio 16

01/10/2015 (c) Dept. Informática - PUC-Rio 17

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. 01/10/2015 (c) Dept. Informática - PUC-Rio 18

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