Baixe o app para aproveitar ainda mais
Prévia do material em texto
Ordenação Ordenação Interna Algoritmos de Ordenação Interna Bibliografia Métodos de Ordenação: Selection, Insertion, Bubble, Merge (Sort) Prof. Hebert Coelho Profa. Nádia Félix Prof. Wanderley Alencar Hebert Coelho, Nádia Félix, Wanderley Alencar Métodos de Ordenação 1 Ordenação Ordenação Interna Algoritmos de Ordenação Interna Bibliografia Ordenação Conceito É a operação de rearranjar os dados em uma determinada ordem. Hebert Coelho, Nádia Félix, Wanderley Alencar Métodos de Ordenação 1 Ordenação Ordenação Interna Algoritmos de Ordenação Interna Bibliografia Ordenação Problema da ordenação - Definição formal [1] Entrada: Uma sequência de n números 〈a1, a2, . . . , an〉, com 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. onde o símbolo ≤ representa uma determinada relação de ordem entre os números, não necessariamente a de “ menor ou igual a”. Hebert Coelho, Nádia Félix, Wanderley Alencar Métodos de Ordenação 1 Ordenação Ordenação Interna Algoritmos de Ordenação Interna Bibliografia Ordenação Observações Muitas vezes, a eficiência no manuseio de dados a serem ordenados pode ser aumentada se os estes estiverem dispostos de acordo com algum critério de ordem. Exemplo: Uma lista telefônica sem qualquer ordem na disposição dos nomes dos assinantes... Hebert Coelho, Nádia Félix, Wanderley Alencar Métodos de Ordenação 1 Ordenação Ordenação Interna Algoritmos de Ordenação Interna Bibliografia Ordenação Observações 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 em que os nomes dos assinantes estão previamente separados em grupos de acordo com a letra inicial do nome de cada assinante. Hebert Coelho, Nádia Félix, Wanderley Alencar Métodos de Ordenação 1 Ordenação Ordenação Interna Algoritmos de Ordenação Interna Bibliografia Ordenação Algoritmos: Classificação Computacional Computacionalmente, considerando os dispositivos de armazenamento sobre os quais o algoritmo de ordenação terá que atuar, é possível categorizá-los em algoritmos de... 1 Ordenação Interna: quando os dados a serem ordenados estão integralmente na memória principal; 2 Ordenação Externa: quando os dados a serem ordenados necessitam de armazenamento em memória secundária (fita (magnética ou digital), HD, SSD, etc.). Nesta disciplina estamos interessados apenas em métodos de ordenação interna. Hebert Coelho, Nádia Félix, Wanderley Alencar Métodos de Ordenação 1 Ordenação Ordenação Interna Algoritmos de Ordenação Interna Bibliografia Ordenação Algoritmos: Classificação Computacional Computacionalmente, considerando os dispositivos de armazenamento sobre os quais o algoritmo de ordenação terá que atuar, é possível categorizá-los em algoritmos de... 1 Ordenação Interna: quando os dados a serem ordenados estão integralmente na memória principal; 2 Ordenação Externa: quando os dados a serem ordenados necessitam de armazenamento em memória secundária (fita (magnética ou digital), HD, SSD, etc.). Nesta disciplina estamos interessados apenas em métodos de ordenação interna. Hebert Coelho, Nádia Félix, Wanderley Alencar Métodos de Ordenação 1 Ordenação Ordenação Interna Algoritmos de Ordenação Interna Bibliografia Ordenação Algoritmos: Classificação Computacional Nesta disciplina estamos interessados apenas em métodos de ordenação interna. Hebert Coelho, Nádia Félix, Wanderley Alencar Métodos de Ordenação 1 Ordenação Ordenação Interna Algoritmos de Ordenação Interna Bibliografia Ordenação Interna Introdução Na escolha de um método de ordenação interna devem ser considerados, principalmente: O tempo gasto para a ordenaçãoa; O uso eficiente da memória principal disponível. aLembre-se: o termo tempo, neste contexto, significa o número de operações realizadas para dar integral consecução à operação desejada. Hebert Coelho, Nádia Félix, Wanderley Alencar Métodos de Ordenação 1 Ordenação Ordenação Interna Algoritmos de Ordenação Interna Bibliografia Ordenação Interna Introdução A maioria dos métodos de ordenação é baseado na comparação das chaves dos elementos que formam o conjunto de dados a ordenar: Exemplos: Bubble Sort, Insertion Sort, Selection Sort, Merge Sort, etc. Existem métodos de ordenação que utilizam o princípio da distribuição: Exemplos: Radix Sort, Bucket Sort, etc. Hebert Coelho, Nádia Félix, Wanderley Alencar Métodos de Ordenação 1 Ordenação Ordenação Interna Algoritmos de Ordenação Interna Bibliografia Algoritmos de Ordenação Interna Aplicação Algoritmos de ordenação interna podem ser aplicados a diversas estruturas de dados, tais como: Vetores; Matrizes; Estruturas dinâmicas (listas lineares encadeadas, etc.). Hebert Coelho, Nádia Félix, Wanderley Alencar Métodos de Ordenação 1 Ordenação Ordenação Interna Algoritmos de Ordenação Interna Bibliografia Algoritmos de Ordenação Interna Classificação Um algoritmo de ordenação é estável se preservar a ordem relativa de elementos com valores idênticos para a chave de ordenação considerada, ou seja, os elementos com chaves idênticas são mantidos na mesma ordem que estavam antes da ordenação ocorrer. Hebert Coelho, Nádia Félix, Wanderley Alencar Métodos de Ordenação 1 Ordenação Ordenação Interna Algoritmos de Ordenação Interna Bibliografia Algoritmos de Ordenação Interna Classificação Um algoritmo de ordenação é não estável quando não garante que a ordem relativa de elementos com valores idênticos para a chave de ordenação considerada será mantida após a ordenação ocorrer. Hebert Coelho, Nádia Félix, Wanderley Alencar Métodos de Ordenação 1 Ordenação Ordenação Interna Algoritmos de Ordenação Interna Bibliografia Algoritmos de Ordenação Interna Insertion Sort O algoritmo de ordenação “por inserção” aplica a ideia de dividir os elementos a serem ordenados em duas subestruturas, cada uma armazenando os elementos: já ordenados; os por ordenar. Hebert Coelho, Nádia Félix, Wanderley Alencar Métodos de Ordenação 1 Ordenação Ordenação Interna Algoritmos de Ordenação Interna Bibliografia Algoritmos de Ordenação Interna Insertion Sort – Exemplo de uso: 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 Hebert Coelho, Nádia Félix, Wanderley Alencar Métodos de Ordenação 1 Ordenação Ordenação Interna Algoritmos de Ordenação Interna Bibliografia Algoritmos de Ordenação Interna Insertion Sort – Exemplo de uso: 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 Hebert Coelho, Nádia Félix, Wanderley Alencar Métodos de Ordenação 1 Ordenação Ordenação Interna Algoritmos de Ordenação Interna Bibliografia Algoritmos de Ordenação Interna Insertion Sort – Exemplo de uso: 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 Hebert Coelho, Nádia Félix, Wanderley Alencar Métodos de Ordenação 1 Ordenação Ordenação Interna Algoritmos de Ordenação Interna Bibliografia Algoritmos de Ordenação Interna Insertion Sort – Exemplo de uso: 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 Hebert Coelho,Nádia Félix, Wanderley Alencar Métodos de Ordenação 1 Ordenação Ordenação Interna Algoritmos de Ordenação Interna Bibliografia Algoritmos de Ordenação Interna Insertion Sort – Exemplo de uso: 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 Hebert Coelho, Nádia Félix, Wanderley Alencar Métodos de Ordenação 1 Ordenação Ordenação Interna Algoritmos de Ordenação Interna Bibliografia Algoritmos de Ordenação Interna Insertion Sort – Exemplo de uso: 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 Hebert Coelho, Nádia Félix, Wanderley Alencar Métodos de Ordenação 1 Ordenação Ordenação Interna Algoritmos de Ordenação Interna Bibliografia Algoritmos de Ordenação Interna Insertion Sort – Exemplo de uso: 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 Hebert Coelho, Nádia Félix, Wanderley Alencar Métodos de Ordenação 1 Ordenação Ordenação Interna Algoritmos de Ordenação Interna Bibliografia Insertion Sort – Código fonte em C: 1 // v é o vetor e n representa o seu tamanho − quantidade de elementos 2 void insertionSort( int∗ v, int n ) { 3 int i = 0, j = 1, aux = 0; 4 while (j < n) { 5 aux = v[j]; 6 i = j − 1; 7 while ((i >= 0) && (v[i] > aux)) { 8 v[i + 1] = v[i]; 9 i = i − 1; 10 } 11 v[i + 1] = aux; 12 j = j + 1; 13 } 14 } Hebert Coelho, Nádia Félix, Wanderley Alencar Métodos de Ordenação 1 Ordenação Ordenação Interna Algoritmos de Ordenação Interna Bibliografia Algoritmos de Ordenação Interna Insertion Sort – Exercícios Considere que o procedimento insertionSort será executado utilizando um vetor de tamanho cinco, onde: 1 as chaves estão previamente dispostas em ordem crescente. 2 as chaves estão previamente dispostas em ordem decrescente; Conte, em cada caso, o número de vezes que a declaração v[i+1] = aux; é executada. Hebert Coelho, Nádia Félix, Wanderley Alencar Métodos de Ordenação 1 Ordenação Ordenação Interna Algoritmos de Ordenação Interna Bibliografia Algoritmos de Ordenação Interna Insertion Sort – Exercícios 1 Qual é o pior caso e o melhor caso para este algoritmo? 2 A ordenação por inserção é do tipo estável? Hebert Coelho, Nádia Félix, Wanderley Alencar Métodos de Ordenação 1 Ordenação Ordenação Interna Algoritmos de Ordenação Interna Bibliografia Algoritmos de Ordenação Interna Insertion Sort – Nota-se que: O número mínimo de comparações e movimentos ocorre quando os elementos estão, originalmente, na ordem desejada; O número máximo de comparações e movimentos ocorre quando os elementos estão, originalmente, na ordem inversa à ordem desejada; É um bom método a ser usado quando a sequência está quase ordenada ou quando se deseja adicionar poucos elementos a uma sequência já ordenada; Ele é do tipo estável. Hebert Coelho, Nádia Félix, Wanderley Alencar Métodos de Ordenação 1 Ordenação Ordenação Interna Algoritmos de Ordenação Interna Bibliografia Algoritmos de Ordenação Interna Selection Sort O algoritmo de ordenação “por seleção” aplica a ideia de procurar o elemento que possui o menor (ou maior) valor de chave e movimentá-lo para a primeira (ou última) posição no conjunto de dados. Hebert Coelho, Nádia Félix, Wanderley Alencar Métodos de Ordenação 1 Ordenação Ordenação Interna Algoritmos de Ordenação Interna Bibliografia Algoritmos de Ordenação Interna Selection Sort 1 Encontre o elemento cujo valor da chave é o menor (ou maior); 2 Movimente-o para a primeira (ou última) posição no conjunto de dados; 3 Repita os passos anteriores para os (n − 1) elementos remanescentes (não ordenados) do conjunto de dados. Hebert Coelho, Nádia Félix, Wanderley Alencar Métodos de Ordenação 1 Ordenação Ordenação Interna Algoritmos de Ordenação Interna Bibliografia Algoritmos de Ordenação Interna Selection Sort – Exemplo de uso: Intercultural Computer Science Education https://www.youtube.com/watch?v=Ns4TPTC8whw Hebert Coelho, Nádia Félix, Wanderley Alencar Métodos de Ordenação 1 Ordenação Ordenação Interna Algoritmos de Ordenação Interna Bibliografia Algoritmos de Ordenação Interna Selection Sort – Código fonte em C: 1 // v é o vetor e n representa o seu tamanho − quantidade de elementos 2 void selectionSort(int∗ v, int n) { 3 int i, j, min, aux; 4 for (i = 0; i < (n−1); i++) 5 { 6 min = i; 7 for (j = (i+1); j < n; j++) { 8 if(v[j] < v[min]) 9 min = j; 10 } 11 if (v[i] != v[min]) { 12 aux = v[i]; 13 v[i] = v[min]; 14 v[min] = aux; 15 } 16 } 17 } Hebert Coelho, Nádia Félix, Wanderley Alencar Métodos de Ordenação 1 Ordenação Ordenação Interna Algoritmos de Ordenação Interna Bibliografia Algoritmos de Ordenação Interna Selection Sort – Exercícios: 1 Determine o melhor e o pior caso para o selectionSort? 2 A ordenação por seleção é do tipo estável? Hebert Coelho, Nádia Félix, Wanderley Alencar Métodos de Ordenação 1 Ordenação Ordenação Interna Algoritmos de Ordenação Interna Bibliografia Algoritmos de Ordenação Interna Selection Sort – Nota-se que: 1 Dentre 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 é idêntico para o melhor caso, caso médio e pior caso. Assim, mesmo que o vetor esteja ordenado, o custo continua quadrático (n2), onde n é o tamanho da entrada. 3 Não é um algoritmo do tipo estável (depende da implementação). Hebert Coelho, Nádia Félix, Wanderley Alencar Métodos de Ordenação 1 Ordenação Ordenação Interna Algoritmos de Ordenação Interna Bibliografia Algoritmos de Ordenação Interna Bubble Sort O algoritmo de ordenação “por bolhas” aplica a ideia de fazer flutuar o elemento que possui o maior) valor de chave para a última posição no conjunto de dados. Hebert Coelho, Nádia Félix, Wanderley Alencar Métodos de Ordenação 1 Ordenação Ordenação Interna Algoritmos de Ordenação Interna Bibliografia Algoritmos de Ordenação Interna Bubble Sort 1 Flutue o elemento com maior valor de chave para a última posição do conjunto de dados; 2 Repita, (n − 1) vezes, a flutuação anterior. Hebert Coelho, Nádia Félix, Wanderley Alencar Métodos de Ordenação 1 Ordenação Ordenação Interna Algoritmos de Ordenação Interna Bibliografia Algoritmos de Ordenação Interna Bubble Sort – Exemplo de uso: 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 Hebert Coelho, Nádia Félix, Wanderley Alencar Métodos de Ordenação 1 Ordenação Ordenação Interna Algoritmos de Ordenação Interna Bibliografia Algoritmos de Ordenação Interna Bubble Sort – Código fonte em C: 1 // v é o vetor e n representa o seu tamanho − quantidade de elementos 2 void bubbleSort(int∗ v, int n) { 3 int i, fim, aux; 4 for (fim = n−1; fim > 0; −−fim) { 5 for (i = 0; i < fim; ++i) { 6 if (v[i] > v[i+1]) { 7 aux = v[i]; 8 v[i] = v[i+1]; 9 v[i+1] = aux; 10 } 11 } 12 } 13 } Hebert Coelho, Nádia Félix, Wanderley Alencar Métodos de Ordenação 1 Ordenação Ordenação Interna Algoritmos de Ordenação Interna Bibliografia Algoritmos de Ordenação Interna Bubble Sort – 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 é do tipo estável? Hebert Coelho, Nádia Félix, Wanderley Alencar Métodos de Ordenação 1 Ordenação Ordenação Interna Algoritmos de Ordenação Interna Bibliografia Algoritmos de Ordenação Interna Bubble Sort – Exercícios: Como o algoritmo BubbleSort apresentado pode ser melhorado? Hebert Coelho, Nádia Félix, Wanderley Alencar Métodos de Ordenação 1 Ordenação Ordenação Interna Algoritmos de Ordenação Interna Bibliografia Algoritmos de Ordenação Interna Bubble Sort – Exercícios: Resposta: Basta terminar a execução quando “nenhuma troca” é realizada após uma passada pelo vetor. Para isso, basta criarmos uma variável booleana para controlar se houve, ou não, uma troca. Dica: tente implementar esta alteração. Hebert Coelho, Nádia Félix, Wanderley Alencar Métodos de Ordenação 1 Ordenação Ordenação Interna Algoritmos de Ordenação Interna Bibliografia Algoritmos de Ordenação Interna Bubble Sort – Nota-se que: 1 Ele é simples de entender e de implementar; 2 Tem uma desvantagem que, na prática, possui maior tempo de execução mesmo quando comparado a outros algoritmos quadráticos (n2); 3 Tem um número muito grande de movimentações de elementos, assim não deve ser usado se a estrutura a ser ordenada for complexa. Hebert Coelho, Nádia Félix, Wanderley Alencar Métodos de Ordenação 1 Ordenação Ordenação Interna Algoritmos de Ordenação Interna Bibliografia Algoritmos de Ordenação Interna Merge Sort O algoritmo de ordenação “por intercalação direta” aplica o princípio de dividir para conquistar, pois ele sucessivamente biparte o conjunto inicial, de tamanho n, em subconjuntos menores até que se atinjam subconjuntos de tamanho unitário. dados. Em seguida intercala, dois a dois, os subconjuntos obtidos, formando subconjuntos sucessivamente maiores (e ordenados), até que o conjunto original, de tamanho n, seja reconstituído já ordenado. Hebert Coelho, Nádia Félix, Wanderley Alencar Métodos de Ordenação 1 Ordenação Ordenação Interna Algoritmos de Ordenação Interna Bibliografia Algoritmos de Ordenação Interna Merge Sort – Exemplo 01: Hebert Coelho, Nádia Félix, Wanderley Alencar Métodos de Ordenação 1 Ordenação Ordenação Interna Algoritmos de Ordenação Interna Bibliografia Algoritmos de Ordenação Interna Merge Sort Divide, recursivamente, o conjunto de dados até que o subconjunto possua UM elemento; Combine DOIS subconjuntos de maneira a obter UM conjunto maior e ordenado; Esse processo se repete até que exista apenas UM conjunto. Hebert Coelho, Nádia Félix, Wanderley Alencar Métodos de Ordenação 1 Ordenação Ordenação Interna Algoritmos de Ordenação Interna Bibliografia Algoritmos de Ordenação Interna Merge Sort – Exemplo 02: Hebert Coelho, Nádia Félix, Wanderley Alencar Métodos de Ordenação 1 Ordenação Ordenação Interna Algoritmos de Ordenação Interna Bibliografia Algoritmos de Ordenação Interna Merge Sort – Pseudocódigo: 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 } Hebert Coelho, Nádia Félix, Wanderley Alencar Métodos de Ordenação 1 Ordenação Ordenação Interna Algoritmos de Ordenação Interna Bibliografia Algoritmos de Ordenação Interna Merge Sort – Exemplo 03: Intercultural Computer Science Education https://www.youtube.com/watch?v=XaqR3G_NVoo Hebert Coelho, Nádia Félix, Wanderley Alencar Métodos de Ordenação 1 Ordenação Ordenação Interna Algoritmos de Ordenação Interna Bibliografia Algoritmos de Ordenação Interna 1 void mergeSort(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++){ 18 vetor[comAux] = vetAux[comAux−inicio]; 19 } 20 } Hebert Coelho, Nádia Félix, Wanderley Alencar Métodos de Ordenação 1 Ordenação Ordenação Interna Algoritmos de Ordenação Interna Bibliografia Algoritmos de Ordenação Interna Merge Sort – Exercícios: 1 Determine o melhor e o pior caso para o mergeSort? 2 O mergeSort é um algoritmo do tipo estável? Hebert Coelho, Nádia Félix, Wanderley Alencar Métodos de Ordenação 1 Ordenação Ordenação Interna Algoritmos de Ordenação Interna Bibliografia Algoritmos de Ordenação Interna Merge Sort – Nota-se que: 1 Ele é um método de ordenação com tempo: 1 Melhor caso: n · log2 (n); 2 Pior caso:n · log2 (n); 2 Pode ser adaptado para ordenação de arquivos externos (memória secundária); 3 Utiliza mais memória para poder ordenar (no código anterior: vetor auxiliar); 4 O merge sort é estável: não altera a ordem dos elementos com chaves idênticas. Hebert Coelho, Nádia Félix, Wanderley Alencar Métodos de Ordenação 1 Ordenação Ordenação Interna Algoritmos de Ordenação Interna Bibliografia Bibliografia CORMEN, T. H.; LEISERSON, C. E.; RIVEST, R. L. e STEIN, C. Introduction to Algorithms, 3a edição, MIT Press, 2009. ZIVIANI, N. Projeto de Algoritmos: com implementações em Pascal e C, 2a edição, Cengage Learning, 2009. TANENBAUM, A. A., LANGSAM, Y., e AUGUSTEIN, M. J. Estruturas de Dados Usando C, Makron Books, 1995. Slides dos professores Humberto Longo, Márcia Cappelle, Marcelo Quinta e Marcos Roriz Wikipedia. Hebert Coelho, Nádia Félix, Wanderley Alencar Métodos de Ordenação 1 Ordenação Ordenação Interna Algoritmos de Ordenação Interna Bibliografia
Compartilhar