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

Documentos relacionados
BCC202 - Estrutura de Dados I

ALGORITMOS DE ORDENAÇÃO

Métodos de Ordenação Parte 2

Projeto e Análise de Algoritmos

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

Algoritmos de Ordenação: QuickSort

Métodos de Ordenação Parte I

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

heapsort (int *x, int n) { int i, e, s, f, aux; /*fase de pré-processamento - cria heap inicial*/ for (i=1; i<n; i++) { e = x[i]; s = i; f = (s-1)/2;

BCC202 - Estrutura de Dados I

Ordenação. Prof. Jonas Potros

Linguagem C: Ordenação

Algoritmos de Ordenação

Algoritmos de ordenação: Bucketsort, Radixsort e Seleção

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

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

BCC202 - Estrutura de Dados I

Linguagem C: Algoritmos de Ordenação

Algoritmos de Ordenação. Cota inferior. Professora: Fátima L. S. Nunes SISTEMAS DE INFORMAÇÃO

Algoritmos de Ordenação: MergeSort

Algoritmos de ordenação: Inserção e Shellsort

Análise e Complexidade de Algoritmos

1 a Lista de Exercícios

Complexidade de Algoritmos

Quicksort Letícia Rodrigues Bueno

Métodos de Ordenação

Ordenação e Pesquisa de Dados. Aula 07 Insertion Sort e Bubble Sort

Complexidade Assintótica de Programas Letícia Rodrigues Bueno

ALGORITMOS AVANÇADOS. UNIDADE III Algoritmo de Ordenação por Intercalação (Mergesort) Luiz Leão

Universidade Estadual de Mato Grosso do Sul Bacharelado em Ciência da Computação Algoritmos e Estruturas de Dados II Prof. Fabrício Sérgio de Paula

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

Ordenação de Dados. Ordenação de Dados

Algoritmos de Ordenação. Profº Carlos Alberto T. Batista

Métodos de Classificação

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

Aula 3 Listas Lineares Sequenciais Ordenadas. prof Leticia Winkler

Algoritmos e Estruturas de Dados I1 Prof. Eduardo 1

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

Bubble Sort. Tempo total O(n 2 )

ORDENAÇÃO POR INTERCALAÇÃO

void subdivide (LISTA_ENC *pl, LISTA_ENC *pl1, LISTA_ENC *pl2) { int cont, k=1; for (cont=tam(*pl)/2;cont;cont--) {

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

UNIVERSIDADE FEDERAL DO ESPÍRITO SANTO CENTRO UNIVERSITÁRIO NORTE DO ESPÍRITO SANTO

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

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

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

ORDENAÇÃO DE ARQUIVOS. Vanessa Braganholo Estruturas de Dados e Seus Algoritmos

Algoritmos de Ordenação

CIC 110 Análise e Projeto de Algoritmos I

Quick Sort. Considerações Sobre Algoritmos de Ordenação. Estagiário PAE: Jesimar da S. Arantes Professor: ClaudioQuick F. M.

Ordenação em Memória Primária Estrutura de Dados II

2. Ordenação por Seleção

Projeto e Análise de Algoritmos

Filas de Prioridades Letícia Rodrigues Bueno

Extra- Algoritmos de Ordenação

Algoritmo MergeSort. Estrutura de Dados II Prof Jairo Francisco de Souza

UNIVERSIDADE FEDERAL DO PIAUÍ COLÉGIO TÉCNICO DE TERESINA-TÉCNICO EM INFORMÁTICA DISCIPLINA: ESTRUTURA DE DADOS PROFESSOR: Valdemir Junior

Pedro Ribeiro 2014/2015

Solução de Recorrências

Aula 12 Métodos de Classificação: - Classificação por Inserção Direta - Classificação por Seleção Direta

Vectores: Algoritmos de Ordenação. Algoritmos e Estruturas de Dados 2008/2009

Projeto e Análise de Algoritmos

Limite assintótico para a ordenação, Ordenação em tempo linear

Universidade Federal de Santa Maria Colégio Agrícola de Frederico Westphalen Curso Superior de Tecnologia em Sistemas para Internet

Quick Sort. Considerações Sobre Algoritmos de Ordenação. Estagiário PAE: Jesimar da S. Arantes Professor: Claudio Quick F. M.

Classificação e Pesquisa Aula 6 Métodos de Ordenação: ShellSort e QuickSort. Prof. Esp. Pedro Luís Antonelli Anhanguera Educacional

Algoritmos de Ordenação

Basicamente, os tipos de algoritmos de ordenação podem ser resumidos a: Por seleção: seleciona o menor elemento, o segundo menor e assim por diante

Algoritmos de Ordenação

Complexidade de Tempo e Espaço

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

Programação de Computadores Ordenação de Arranjos

Estruturas de Dados 2

Arquivos Sequenciais. Estruturas de Dados II Vanessa Braganholo

ALGORITMOS E ESTRUTURAS DE DADOS CES-11 Prof. Paulo André Castro Sala 110 Prédio da Computação IECE - ITA

Método BubbleSort. Estrutura de Dados II Prof Jairo Francisco de Souza

Transcrição:

Métodos de Ordenação: Selection, Insertion, Bubble, Merge (Sort) Hebert Coelho e Nádia Félix

Ordenação É a operação de rearranjar os dados em uma determinada ordem. Problema da ordenação - Definição formal [1] Entrada: Uma sequência de n números a 1, a 2,..., a n. Saída: Uma permutação (reordenada) a 1, a 2,..., a n da sequência de entrada tal que a 1 a 2... a n.

Ordenação A eficiência no manuseio de dados muitas vezes pode ser aumentada se os dados estiverem dispostos de acordo com algum critério de ordem Exemplo: Uma lista telefônica sem ordem.

Ordenação Do ponto da memória do computador, os algoritmos de ordenação podem ser classificados em: 1 Ordenação Interna (quando os dados a serem ordenados estão na memória principal).

Ordenação Do ponto da memória do computador, os algoritmos de ordenação podem ser classificados em: 1 Ordenação Interna (quando os dados a serem ordenados estão na memória principal). 2 Ordenação Externa (quando os dados a serem ordenados necessitam de armazenamento em memória auxiliar como por exemplo o disco HD). Nesta disciplina estamos interessados em métodos de ordenação interna.

Ordenação Interna Na escolha de um algoritmo de ordenação interna deve ser considerado principalmente: O tempo gasto pela ordenação; O uso econômico da memória disponível;

Ordenação Interna A maioria dos métodos de ordenação é baseado em comparação de chaves; Exemplos: insertionsort, selectionsort, etc; Existem métodos de ordenação que utilizam o princípio da distribuição; Exemplos: radixsort, bucketsort, etc;

Ordenação Interna Algoritmos de ordenação podem ser aplicados a diversos tipos de estrutura, tais como: Vetores; Matrizes; Estruturas dinâmicas. Classificação Um algoritmo de ordenação é estável se preserva ordem relativa de itens com valores idênticos.

Ordenação por inserção (InsertionSort) A idéia da ordenação por inserção é dividir os elementos em duas subestruturas, uma com os elementos já ordenados e outra com elementos ainda por ordenar.

Ordenação por inserção (InsertionSort) - Exemplo O R D E N A

Ordenação por inserção (InsertionSort) - Exemplo O R D E N A O R D E N A

Ordenação por inserção (InsertionSort) - Exemplo O R D E N A O R D E N A O R D E N A

Ordenação por inserção (InsertionSort) - Exemplo O R D E N A O R D E N A O R D E N A D O R E N A

Ordenação por inserção (InsertionSort) - Exemplo O R D E N A O R D E N A O R D E N A D O R E N A D E O R N A

Ordenação por inserção (InsertionSort) - Exemplo O R D E N A O R D E N A O R D E N A D O R E N A D E O R N A D E N O R A

Ordenação por inserção (InsertionSort) - Exemplo O R D E N A O R D E N A O R D E N A D O R E N A D E O R N A D E N O R A A D E N O R Intercultural Computer Science Education https://www.youtube.com/watch?v=roalu379l3u

Ordenação por inserção (InsertionSort) - código em C 1 void insertionsort( int v, int n ) //n é tamanho do vetor 2 { 3 int i= 0; 4 int j= 1; 5 int aux = 0; 6 while (j < n) 7 { 8 aux = v[j]; 9 i = j 1; 10 while ((i >= 0) && (v[i] > aux)) 11 { 12 v[i + 1] = v[i]; 13 i = i 1; 14 } 15 v[i + 1] = aux; 16 j = j + 1; 17 } 18 }

Ordenação por inserção (InsertionSort) - Exercícios 1 Executar a função insertionsort para um vetor de tamanho 5 em ordem crescente e contar o número de vezes que a linha 12 é executada; 2 Executar a função insertionsort para um vetor de tamanho 5 em ordem decrescente e contar o número de vezes que a linha 12 é executada; 3 Qual é o pior caso e o melhor caso para este algoritmo? 4 A ordenação por inserção é estável?

Ordenação por inserção (InsertionSort) O número mínimo de comparações e movimentos ocorre quando os itens estão originalmente em ordem. O número máximo de comparações e movimentos ocorre quando os itens estão originalmente em ordem reversa. Bom método a ser usado quando a sequência esta quase ordenada, ou quando se deseja adicionar poucos itens a uma sequência já ordenada. O algoritmo de ordenação por inserção é estável.

Ordenação por seleção (SelectionSort) A idéia da ordenação por seleção é procurar o menor elemento do vetor (ou maior) e movimentá-lo para a primeira (última) posição do vetor. Repetir para os n elementos do vetor.

Ordenação por seleção (SelectionSort) - Exemplo Intercultural Computer Science Education https://www.youtube.com/watch?v=ns4tptc8whw

SelectionSort - código em C 1 void selection_sort(int v, int n) { //n é tamanho do vetor 2 int i, j, min, aux; 3 for (i = 0; i < (n 1); i++) 4 { 5 min = i; 6 for (j = (i+1); j < n; j++) { 7 if(v[j] < v[min]) 8 min = j; 9 } 10 if (v[i]!= v[min]) { 11 aux = v[i]; 12 v[i] = v[min]; 13 v[min] = aux; 14 } 15 } 16 }

SelectionSort - Exercícios 1 Determine o melhor e o pior caso para o SelectionSort? 2 A ordenação por seleção é estável?

SelectionSort - Vantagens e Desvantagens 1 Uma vantagem do Selection Sort é que entre os algoritmos de ordenação ele apresenta uma das menores quantidades de movimentos entre os elementos, assim pode haver algum ganho quando se necessita ordenar estruturas complexas. 2 Uma desvantagem é que o número de comparações é igual para o melhor caso, caso médio e o pior caso. Assim, mesmo que o vetor esteja ordenado o custo continua quadrático (n 2 ). 3 Não é estável (depende da implementação).

Ordenação por bolhas (BubbleSort) A idéia da ordenação por bolhas é flutuar o maior elemento para o fim. Repita n vezes a flutuação.

Ordenação por bolhas (BubbleSort) - Exemplo Usando visualgo para rodar exemplos Vamos rodar um exemplo com: https://visualgo.net/en/sorting Intercultural Computer Science Education https://www.youtube.com/watch?v=lyzqpjut5b4

BubbleSort - código em C 1 void BubbleSort(int v, int n) { //n é tamanho do vetor 2 int i, fim, aux; 3 for (fim = n 1; fim > 0; fim) { 4 for (i = 0; i < fim; ++i) { 5 if (v[i] > v[i+1]) { 6 aux = v[i]; 7 v[i] = v[i+1]; 8 v[i+1] = aux; 9 } 10 } 11 } 12 }

Exercícios 1 Determine o melhor e o pior caso para o BubbleSort? 2 Como o algoritmo BubbleSort apresentado pode ser melhorado? 3 O BubbleSort é estável?

BubbleSort - Vantagens e Desvantagens 1 Simples de entender e implementar. 2 Uma desvantagem é que na prática ele tem execução lenta mesmo quando comparado a outros algoritmos quadráticos (n 2 ). 3 Tem um número muito grande de movimentação de elementos, assim não deve ser usado se a estrutura a ser ordenada for complexa.

MergeSort (intercalação direta) - Ideia divida o vetor em 2 subvetores (ao meio) recursivamente até ele ter o tamanho 1. Intercale pares de elementos adjacentes. Repita esse processo até restar apenas um arquivo de tamanho n.

MergeSort (intercalação direta) - Ideia Dividir e Conquistar; Divide, recursivamente, o conjunto de dados até que o subconjunto possua 1 elemento Combina 2 subconjuntos de forma a obter 1 conjunto maior e ordenado Esse processo se repete até que exista apenas 1 conjunto.

MergeSort (intercalação direta) - Exemplo

MergeSort - código em C 1 void mergesort(int vetor, int inicio, int fim){ 2 if (inicio < fim) { 3 int meio = (inicio+fim)/2; 4 mergesort(vetor, inicio, meio); 5 mergesort(vetor, meio+1, fim); 6 merge(vetor, inicio, meio, fim); 7 } 8 }

MergeSort (intercalação direta) - Ideia divida o vetor em 2 subvetores (ao meio) recursivamente até ele ter o tamanho 1. Intercale pares de elementos adjacentes. Repita esse processo até restar apenas um arquivo de tamanho n.

MergeSort (intercalação direta) - Exemplo Intercultural Computer Science Education https://www.youtube.com/watch?v=xaqr3g_nvoo

MergeSort - código em C 1 void merge(int vetor[], int inicio, int meio, int fim) { 2 int com1 = inicio, com2 = meio+1, comaux = 0, vetaux[fim inicio+1]; 3 while(com1<=meio && com2<=fim){ 4 if(vetor[com1] <= vetor[com2]){ 5 vetaux[comaux] = vetor[com1]; 6 com1++; 7 }else{ 8 vetaux[comaux] = vetor[com2]; 9 com2++; } 10 comaux++; } 11 while(com1<=meio){ //Caso ainda haja elementos na primeira metade 12 vetaux[comaux] = vetor[com1]; 13 comaux++;com1++; } 14 while(com2<=fim){ //Caso ainda haja elementos na segunda metade 15 vetaux[comaux] = vetor[com2]; 16 comaux++;com2++; } 17 for(comaux=inicio;comaux<=fim;comaux++){ //Move os elementos de volta para o vetor original 18 vetor[comaux] = vetaux[comaux inicio]; 19 } 20 }

Exercícios 1 Determine o melhor e o pior caso para o MergeSort? 2 O MergeSort é estável?

MergeSort (intercalação direta) - Vantagens e Desvantagens 1 Método de ordenação com tempo: 1 Melhor caso: n log 2 n; 2 Pior caso:n log 2 n; 2 Pode ser adaptado para ordenação de arquivos externos (memória secundária). 3 Utiliza mais memória para poder ordenar (vetor auxiliar). 4 O MergeSort é estável: não altera a ordem de dados iguais.

Bibliografia CORMEN, T. H.; LEISERSON, C. E.; RIVEST, R. L. e STEIN, C. Introduction to Algorithms, 3 a edição, MIT Press, 2009. ZIVIANI, N. Projeto de Algoritmos: com implementações em Pascal e C, 2 a edição, Cengage Learning, 2009. Slides dos professores Humberto Longo, Márcia Cappelle, Marcelo Quinta e Marcos Roriz wikipedia.