Introdução BubbleSort SelectionSort InsertionSort Conclusão BCC202 - Estrutura de Dados I Aula 12: Ordenação: Bubble, Selection e Insertion Sort Reinaldo Fortes Universidade Federal de Ouro Preto, UFOP Departamento de Computação, DECOM Website: www.decom.ufop.br/reifortes Email: [email protected] Material elaborado com base nos slides do Prof. Túlio Toffolo (curso de 2013/01). 2013/02 Exercícios Introdução BubbleSort SelectionSort InsertionSort Conclusão Exercícios Conteúdo 1 Introdução Conceitos Básicos de Ordenação 2 BubbleSort 3 SelectionSort 4 InsertionSort 5 Conclusão 6 Exercícios BCC202 - Estrutura de Dados I Aula 12: Ordenação: Bubble, Selection e Insertion Sort (2) Introdução BubbleSort SelectionSort InsertionSort Conclusão Exercícios Conteúdo 1 Introdução Conceitos Básicos de Ordenação 2 BubbleSort 3 SelectionSort 4 InsertionSort 5 Conclusão 6 Exercícios BCC202 - Estrutura de Dados I Aula 12: Ordenação: Bubble, Selection e Insertion Sort (3) Introdução BubbleSort SelectionSort InsertionSort Conclusão Exercícios Conceitos Básicos de Ordenação O que é um método de ordenação? Ordenar: processo de rearranjar um conjunto de objetos em uma ordem ascendente ou descendente. A ordenação visa facilitar a recuperação posterior de itens do conjunto ordenado. Dificuldade de se utilizar um catálogo telefônico se os nomes das pessoas não estivessem listados em ordem alfabética. Em ciência da computação um método de ordenação coloca os elementos de uma dada sequência em uma certa ordem, ou seja, efetua sua ordenação completa ou parcial. As ordens mais usadas são a numérica e a lexicográfica. BCC202 - Estrutura de Dados I Aula 12: Ordenação: Bubble, Selection e Insertion Sort (4) Introdução BubbleSort SelectionSort InsertionSort Conclusão Exercícios Conceitos Básicos de Ordenação Notação Os métodos trabalham sobre os registros de um arquivo. Cada registro possui uma chave utilizada para controlar a ordenação. Podem existir outros componentes em um registro. Estrutura de um registro: 1 typedef int TChave ; 2 3 4 5 6 typedef struct { TChave Chave ; /* outros componentes */ } TItem ; BCC202 - Estrutura de Dados I Aula 12: Ordenação: Bubble, Selection e Insertion Sort (5) Introdução BubbleSort SelectionSort InsertionSort Conclusão Exercícios Conceitos Básicos de Ordenação Características Qualquer tipo de chave sobre o qual exista uma regra de ordenação bem-definida pode ser utilizado. Um método de ordenação é estável se a ordem relativa dos itens com chaves iguais não se altera durante a ordenação. Alguns dos métodos mais eficientes não são estáveis. A estabilidade pode ser forçada quando o método é não-estável. BCC202 - Estrutura de Dados I Aula 12: Ordenação: Bubble, Selection e Insertion Sort (6) Introdução BubbleSort SelectionSort InsertionSort Conclusão Exercícios Conceitos Básicos de Ordenação Características Os métodos de ordenação podem ser classificados como: Ordenação Interna: o arquivo a ser ordenado cabe todo na memória principal. Qualquer registro pode ser imediatamente acessado. Ordenação Externa: o arquivo a ser ordenado não cabe todo na memória principal. Registros são acessados seqüencialmente ou em blocos. BCC202 - Estrutura de Dados I Aula 12: Ordenação: Bubble, Selection e Insertion Sort (7) Introdução BubbleSort SelectionSort InsertionSort Conclusão Exercícios Conceitos Básicos de Ordenação Características A maioria dos métodos de ordenação é baseada em comparações das chaves. Existem métodos de ordenação que utilizam o princípio da distribuição. Exemplo: ordenar um baralho com 52 cartas, pelo valor da carta e pelo nipe. Primeiro separe as cartas em treze montes (valores das cartas). Em seguida, colete os montes na ordem desejada. Distribua cada monte em quatro montes (naipes das cartas). Colete os montes na ordem desejada. Qual é o custo deste algoritmo? BCC202 - Estrutura de Dados I Aula 12: Ordenação: Bubble, Selection e Insertion Sort (8) Introdução BubbleSort SelectionSort InsertionSort Conclusão Exercícios Conceitos Básicos de Ordenação Critérios de análise Sendo n o número registros no arquivo, as medidas de complexidade relevantes são: Número de comparações C(n) entre chaves. Número de movimentações M(n) de registros do arquivo. O uso econômico da memória disponível é um requisito primordial na ordenação interna. Métodos de ordenação in situ são os preferidos. Métodos que utilizam listas encadeadas não são muito utilizados. Métodos que fazem cópias dos itens a serem ordenados possuem menor importância. BCC202 - Estrutura de Dados I Aula 12: Ordenação: Bubble, Selection e Insertion Sort (9) Introdução BubbleSort SelectionSort InsertionSort Conclusão Exercícios Conceitos Básicos de Ordenação Ordenação Interna por Comparação Métodos simples: Adequados para pequenos arquivos. Requerem O(n 2 ) comparações. Produzem programas pequenos. Métodos eficientes: Adequados para arquivos maiores. Requerem O(n l og n) comparações. Usam menos comparações. As comparações são mais complexas nos detalhes. BCC202 - Estrutura de Dados I Aula 12: Ordenação: Bubble, Selection e Insertion Sort (10) Introdução BubbleSort SelectionSort InsertionSort Conclusão Exercícios Conceitos Básicos de Ordenação O melhor algoritmo Atenção Não existe um método de ordenação considerado universalmente superior a todos os outros. É necessário analisar o problema e, com base nas características dos dados, decidir qual método melhor se aplica à ele. BCC202 - Estrutura de Dados I Aula 12: Ordenação: Bubble, Selection e Insertion Sort (11) Introdução BubbleSort SelectionSort InsertionSort Conclusão Exercícios Conceitos Básicos de Ordenação O que estudaremos? Neste curso estudaremos apenas algoritmos de ordenação interna e que utilizam o princípio da comparação. Nesta aula: BubbleSort. SelectionSort. InsertionSort. BCC202 - Estrutura de Dados I Aula 12: Ordenação: Bubble, Selection e Insertion Sort (12) Introdução BubbleSort SelectionSort InsertionSort Conclusão Exercícios Conteúdo 1 Introdução Conceitos Básicos de Ordenação 2 BubbleSort 3 SelectionSort 4 InsertionSort 5 Conclusão 6 Exercícios BCC202 - Estrutura de Dados I Aula 12: Ordenação: Bubble, Selection e Insertion Sort (13) Introdução BubbleSort SelectionSort InsertionSort Conclusão Exercícios Método da Bolha Funcionamento Os elementos vão “borbulhando” a cada iteração do método até a posição correta para ordenação da lista. Como os elementos são trocados (borbulhados) frequentemente, há um alto custo com troca de elementos. Animação BCC202 - Estrutura de Dados I Aula 12: Ordenação: Bubble, Selection e Insertion Sort (14) Introdução BubbleSort SelectionSort InsertionSort Conclusão Exercícios Método da Bolha Algoritmo 1 2 3 4 5 6 7 8 9 10 11 12 13 void Bolha ( TItem * v , int n ) { int i , j ; TItem aux ; for ( i = 0; i < n -1; i ++) { for ( j = 1; j < n - i ; j ++) { if ( v [ j ]. Chave < v [j -1]. Chave ) { aux = v [ j ]; v [ j ] = v [j -1]; v [j -1] = aux ; } } } } Animação BCC202 - Estrutura de Dados I Vídeo Aula 12: Ordenação: Bubble, Selection e Insertion Sort (15) Introdução BubbleSort SelectionSort InsertionSort Conclusão Exercícios Método da Bolha Análise de Complexidade Comparações (C(n)): C (n) = n−2 X (n − i − 1) = i=0 i=0 = n(n − 1) − = n−2 X n− n−2 X i− i=0 n−2 X 1 i=0 (0 + n − 2)(n − 1) − (n − 1) 2 n2 − n = O(n2 ) 2 Movimentações (M(n)): M(n) = 3C (n) = O(n2 ) BCC202 - Estrutura de Dados I Aula 12: Ordenação: Bubble, Selection e Insertion Sort (16) Introdução BubbleSort SelectionSort InsertionSort Conclusão Exercícios Método da Bolha Características Vantagens Algoritmo simples. Algoritmo estável. Desvantagens O fato de o arquivo já estar ordenado não ajuda a reduzir o número de comparações (o custo continua quadrático), porém o número de movimentações cai para zero. BCC202 - Estrutura de Dados I Aula 12: Ordenação: Bubble, Selection e Insertion Sort (17) Introdução BubbleSort SelectionSort InsertionSort Conclusão Exercícios Método da Bolha Melhoria no Algoritmo Original: 1 2 3 4 5 6 7 8 9 10 11 12 13 Melhorado: void Bolha ( TItem * v , int n ) { int i , j ; TItem aux ; for ( i = 0; i < n -1; i ++) { for ( j = 1; j < n - i ; j ++) { if ( v [ j ]. Chave < v [j -1]. Chave ) { aux = v [ j ]; v [ j ] = v [j -1]; v [j -1] = aux ; } } } } BCC202 - Estrutura de Dados I 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 void Bolha ( TItem * v , int n ) { int i , j , troca ; TItem aux ; for ( i = 0; i < n -1; i ++) { troca = 0; for ( j = 1; j < n - i ; j ++) { if ( v [ j ]. Chave < v [j -1]. Chave ) { aux = v [ j ]; v [ j ] = v [j -1]; v [j -1] = aux ; troca ++; } } if ( troca == 0) break ; } } Aula 12: Ordenação: Bubble, Selection e Insertion Sort (18) Introdução BubbleSort SelectionSort InsertionSort Conclusão Exercícios Método da Bolha Melhoria no Algoritmo Original: 1 2 3 4 5 6 7 8 9 10 11 12 13 Melhorado: void Bolha ( TItem * v , int n ) { int i , j ; TItem aux ; for ( i = 0; i < n -1; i ++) { for ( j = 1; j < n - i ; j ++) { if ( v [ j ]. Chave < v [j -1]. Chave ) { aux = v [ j ]; v [ j ] = v [j -1]; v [j -1] = aux ; } } } } 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 void Bolha ( TItem * v , int n ) { int i , j , troca ; TItem aux ; for ( i = 0; i < n -1; i ++) { troca = 0; for ( j = 1; j < n - i ; j ++) { if ( v [ j ]. Chave < v [j -1]. Chave ) { aux = v [ j ]; v [ j ] = v [j -1]; v [j -1] = aux ; troca ++; } } if ( troca == 0) break ; } } Melhoria Interrompe o processo quando não ocorrem mais trocas. BCC202 - Estrutura de Dados I Aula 12: Ordenação: Bubble, Selection e Insertion Sort (18) Introdução BubbleSort SelectionSort InsertionSort Conclusão Exercícios Conteúdo 1 Introdução Conceitos Básicos de Ordenação 2 BubbleSort 3 SelectionSort 4 InsertionSort 5 Conclusão 6 Exercícios BCC202 - Estrutura de Dados I Aula 12: Ordenação: Bubble, Selection e Insertion Sort (19) Introdução BubbleSort SelectionSort InsertionSort Conclusão Exercícios Método de Seleção Funcionamento Seleciona do n-ésimo menor (ou maior) elemento da lista. Troca do n-ésimo menor (ou maior) elemento com a n-ésima posição da lista. É realizada apenas uma única troca a cada iteração. Animação BCC202 - Estrutura de Dados I Vídeo Aula 12: Ordenação: Bubble, Selection e Insertion Sort (20) Introdução BubbleSort SelectionSort InsertionSort Conclusão Exercícios Método de Seleção Algoritmo 1 2 3 4 5 6 7 8 9 10 11 12 13 void Selecao ( TItem * v , int n ) { int i , j , Min ; TItem aux ; for ( i = 0; i < n - 1; i ++) { Min = i ; for ( j = i + 1 ; j < n ; j ++) if ( v [ j ]. Chave < v [ Min ]. Chave ) Min = j ; aux = v [ Min ]; v [ Min ] = v [ i ]; v [ i ] = aux ; } } Animação BCC202 - Estrutura de Dados I Aula 12: Ordenação: Bubble, Selection e Insertion Sort (21) Introdução BubbleSort SelectionSort InsertionSort Conclusão Exercícios Método de Seleção Análise de Complexidade Comparações (C(n)): C (n) = n−2 X (n − i − 1) = i=0 i=0 = n(n − 1) − = n−2 X n− n−2 X i− i=0 n−2 X 1 i=0 (0 + n − 2)(n − 1) − (n − 1) 2 n2 − n = O(n2 ) 2 Movimentações (M(n)): M(n) = 3(n − 1) = O(n) BCC202 - Estrutura de Dados I Aula 12: Ordenação: Bubble, Selection e Insertion Sort (22) Introdução BubbleSort SelectionSort InsertionSort Conclusão Exercícios Método de Seleção Características Vantagens Custo linear no tamanho da entrada para o número de movimentos de registros. É o algoritmo a ser utilizado para arquivos com registros muito grandes (alto custo de movimentação). É muito interessante para arquivos pequenos. Desvantagens O fato de o arquivo já estar ordenado não ajuda em nada, pois o custo continua quadrático. O algoritmo não é estável. BCC202 - Estrutura de Dados I Aula 12: Ordenação: Bubble, Selection e Insertion Sort (23) Introdução BubbleSort SelectionSort InsertionSort Conclusão Exercícios Método de Seleção Melhoria no Algoritmo Original: 1 2 3 4 5 6 7 8 9 10 11 12 13 Melhorado: void Selecao ( TItem * v , int n ) { int i , j , Min ; TItem aux ; for ( i = 0; i < n - 1; i ++) { Min = i ; for ( j = i + 1 ; j < n ; j ++) if ( v [ j ]. Chave < v [ Min ]. Chave ) Min = j ; aux = v [ Min ]; v [ Min ] = v [ i ]; v [ i ] = aux ; } } BCC202 - Estrutura de Dados I 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 void Selecao ( TItem * v , int n ) { int i , j , Min ; TItem aux ; for ( i = 0; i < n - 1; i ++) { Min = i ; for ( j = i + 1 ; j < n ; j ++) if ( v [ j ]. Chave < v [ Min ]. Chave ) Min = j ; if ( i != Min ) { aux = v [ Min ]; v [ Min ] = v [ i ]; v [ i ] = aux ; } } } Aula 12: Ordenação: Bubble, Selection e Insertion Sort (24) Introdução BubbleSort SelectionSort InsertionSort Conclusão Exercícios Método de Seleção Melhoria no Algoritmo Original: 1 2 3 4 5 6 7 8 9 10 11 12 13 Melhorado: void Selecao ( TItem * v , int n ) { int i , j , Min ; TItem aux ; for ( i = 0; i < n - 1; i ++) { Min = i ; for ( j = i + 1 ; j < n ; j ++) if ( v [ j ]. Chave < v [ Min ]. Chave ) Min = j ; aux = v [ Min ]; v [ Min ] = v [ i ]; v [ i ] = aux ; } } 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 void Selecao ( TItem * v , int n ) { int i , j , Min ; TItem aux ; for ( i = 0; i < n - 1; i ++) { Min = i ; for ( j = i + 1 ; j < n ; j ++) if ( v [ j ]. Chave < v [ Min ]. Chave ) Min = j ; if ( i != Min ) { aux = v [ Min ]; v [ Min ] = v [ i ]; v [ i ] = aux ; } } } Melhoria Realiza troca apenas quando é realmente necessário. BCC202 - Estrutura de Dados I Aula 12: Ordenação: Bubble, Selection e Insertion Sort (24) Introdução BubbleSort SelectionSort InsertionSort Conclusão Exercícios Conteúdo 1 Introdução Conceitos Básicos de Ordenação 2 BubbleSort 3 SelectionSort 4 InsertionSort 5 Conclusão 6 Exercícios BCC202 - Estrutura de Dados I Aula 12: Ordenação: Bubble, Selection e Insertion Sort (25) Introdução BubbleSort SelectionSort InsertionSort Conclusão Exercícios Método de Inserção Funcionamento Algoritmo utilizado pelo jogador de cartas: As cartas são ordenadas da esquerda para direita uma por uma. O jogador escolhe a segunda carta e verifica se ela deve ficar antes ou na posição que está. Depois a terceira carta é classificada, deslocando-a até sua posição correta. O procedimento é repetido até ordenar todas as cartas. Alto custo em remover uma carta de uma posição e colocá-la em outra quando a representação é feita por arrays. Animação BCC202 - Estrutura de Dados I Vídeo Aula 12: Ordenação: Bubble, Selection e Insertion Sort (26) Introdução BubbleSort SelectionSort InsertionSort Conclusão Exercícios Método de Inserção Algoritmo SEM Sentinela: 1 2 3 4 5 6 7 8 9 10 11 12 13 COM Sentinela: void Insercao ( TItem * v , int n ) { int i , j ; TItem aux ; for ( i = 1; i < n ; i ++) { aux = v [ i ]; j = i - 1; while ( j >= 0 && aux . Chave < v [ j ]. Chave ) { v [ j + 1] = v [ j ]; j - -; } v [ j + 1] = aux ; } } 1 2 3 4 5 6 7 8 9 10 11 12 void Insercao ( TItem * v , int n ) { int i , j ; for ( i = n -2; i >= 0; i - -) { v [ n ] = v [ i ]; j = i + 1; while ( v [ n ]. Chave > v [ j ]. Chave ) { v [ j - 1] = v [ j ]; j ++; } v [ j - 1] = v [ n ] } } Animação BCC202 - Estrutura de Dados I Aula 12: Ordenação: Bubble, Selection e Insertion Sort (27) Introdução BubbleSort SelectionSort InsertionSort Conclusão Exercícios Método de Inserção Análise de Complexidade Comparações (C(n)): No laço mais interno, na i -ésima iteração: Melhor caso: C i (n) = 1. Pior caso: C i (n) = i . Caso médio: C i (n) = 1 i ∗ (1 + 2 + ... + i ) = i +1 . 2 Assumindo que todas as permutações de n são igualmente prováveis no caso médio, temos: Melhor caso: C(n) = (1 + 1 + ... + 1) = n − 1. Pior caso: C(n) = (1 + 2 + ... + (n − 1)) = n2 2 − n2 . Caso médio: C(n) = (1/2) ∗ (2 + ... + n) = n2 4 + BCC202 - Estrutura de Dados I Aula 12: Ordenação: Bubble, Selection e Insertion Sort n 4 − 12 . (28) Introdução BubbleSort SelectionSort InsertionSort Conclusão Exercícios Método de Inserção Análise de Complexidade Movimentações (M(n)): No laço mais interno, na i -ésima iteração: Melhor caso: M i (n) = 0. Pior caso: M i (n) = i . Caso médio: M i (n) = 1 i ∗ (0 + 1 + 2 + ... + i − 1) = i −1 . 2 Assumindo que todas as permutações de n são igualmente prováveis no caso médio, temos: Melhor caso: M(n) = (2 + 2 + ... + 2) = 2n − 2. Pior caso: M(n) = ((2 + 1) + ... + (2 + n − 1)) = Caso médio: M(n) = (1/2) ∗ (2 + 3 + ... + n) = BCC202 - Estrutura de Dados I Aula 12: Ordenação: Bubble, Selection e Insertion Sort n 2 +3n−4 . 2 n 2 +n−2 . 2 (29) Introdução BubbleSort SelectionSort InsertionSort Conclusão Exercícios Método de Inserção Características O número mínimo de comparações e movimentos ocorre quando os itens estão originalmente em ordem. O número máximo ocorre quando os itens estão originalmente na ordem reversa. É o método a ser utilizado quando o arquivo está “quase” ordenado. É um bom método quando se deseja adicionar uns poucos itens a um arquivo ordenado, pois o custo é linear. O algoritmo de ordenação por inserção é estável. BCC202 - Estrutura de Dados I Aula 12: Ordenação: Bubble, Selection e Insertion Sort (30) Introdução BubbleSort SelectionSort InsertionSort Conclusão Exercícios Conteúdo 1 Introdução Conceitos Básicos de Ordenação 2 BubbleSort 3 SelectionSort 4 InsertionSort 5 Conclusão 6 Exercícios BCC202 - Estrutura de Dados I Aula 12: Ordenação: Bubble, Selection e Insertion Sort (31) Introdução BubbleSort SelectionSort InsertionSort Conclusão Exercícios Conclusão Conclusão Nesta aula tivemos o primeiro contato com algoritmos de ordenação. Foram vistos os algoritmos BubbleSort, SelectionSort e InsertionSort. Cada algoritmo possui suas características particularidades: Não existe um método de ordenação considerado universalmente superior a todos os outros. É necessário analisar o problema e, com base nas características dos dados, decidir qual método melhor se aplica à ele. BCC202 - Estrutura de Dados I Aula 12: Ordenação: Bubble, Selection e Insertion Sort (32) Introdução BubbleSort SelectionSort InsertionSort Conclusão Exercícios Conclusão Conclusão Quadro comparativo dos métodos de ordenação: Comparações Movimentações Algoritmo Melhor Melhor O(n ) O(n) Médio O(n) 2 O(n ) O(n) Espaço Estável In situ O(1) Sim Sim Pior O(n 2 ) 2 Selection ∗ Pior O(n 2 ) Bubble Insertion Médio 2 O(n ) ∗ O(1) Não Sim O(1) Sim Sim Existem versões estáveis. BCC202 - Estrutura de Dados I Aula 12: Ordenação: Bubble, Selection e Insertion Sort (33) Introdução BubbleSort SelectionSort InsertionSort Conclusão Exercícios Conclusão Conclusão A tarefa de ordenação é muito importante, ela é uma necessidade básica para a solução de muitos problemas. Próxima aula: MergeSort. Dúvidas? BCC202 - Estrutura de Dados I Aula 12: Ordenação: Bubble, Selection e Insertion Sort (34) Introdução BubbleSort SelectionSort InsertionSort Conclusão Exercícios Conteúdo 1 Introdução Conceitos Básicos de Ordenação 2 BubbleSort 3 SelectionSort 4 InsertionSort 5 Conclusão 6 Exercícios BCC202 - Estrutura de Dados I Aula 12: Ordenação: Bubble, Selection e Insertion Sort (35) Introdução BubbleSort SelectionSort InsertionSort Conclusão Exercícios Exercícios propostos Exercício 01 Dada a sequência de números: 3 4 9 2 5 1 8. Ordene em ordem crescente utilizando os três algoritmos aprendidos em sala (BubbleSort, SelectionSort e InsertionSort), apresentando a sequência dos números a cada passo (Teste de Mesa). BCC202 - Estrutura de Dados I Aula 12: Ordenação: Bubble, Selection e Insertion Sort (36)