Ordenação - Motivação Universidade Federal de Santa Maria Colégio Agrícola de Frederico Westphalen Curso Superior de Tecnologia em Sistemas para Internet Prof. Bruno B. Boniati www.cafw.ufsm.br/~bruno
Algoritmos para ordenação de dados
Requisito comum em aplicações: apresentar informações ordenadas; Alternativas: Manter os dados sempre ordenados (as inclusões são feitas mantendo-se a ordem desejada); Alto custo computacional (pois a cada inclusão a informação precisa descobrir o seu lugar); Pouca flexibilidade (funciona apenas para um único critério de ordenação); Aplicar algoritmos de ordenação em dados desordenados; Maior flexibilidade (diferentes critérios podem ser aplicados);
Sorting Requisitos: Eficácia de Tempo de execução (devem ser rápidos); Consumo de memória (devem ocupar pouca memória); Aplicação Algoritmos de ordenação são normalmente aplicados em listas que possuem uma relação de vizinhança em todos os nodos: como listas duplamente encadeadas e vetores; A entrada do algoritmo é um conjunto desordenado e a saída é o mesmo conjunto, porém ordenado.
Quanto a localização dos dados: Interna todos os registros cabem na mem. principal; Externa os registros estão guardados em arquivos e precisam ser ordenados parcialmente em mem. principal; Quanto a estabilidade Estáveis Em uma reordenação (por outro campo) a ordem original não é alterada; Instáveis Se uma reordenação ocorrer a ordem original pode ser alterada. Ex. Suponhamos uma lista de nomes de pessoas e suas idades, ordenada alfabeticamente. Se uma método de ordenação for aplicado pelo campo idade o método estável consegue também manter a ordem alfabética nos indivíduos de mesma idade enquanto que o método instável não (métodos instáveis geralmente são mais eficientes).
Aula 13 Selection Sort Universidade Federal de Santa Maria Colégio Agrícola de Frederico Westphalen Curso Superior de Tecnologia em Sistemas para Internet Prof. Bruno B. Boniati www.cafw.ufsm.br/~bruno
Ordenação por Seleção http://www.sorting-algorithms.com
Selection Sort Ordenação por seleção; Algoritmo de simples implementação, recomendado para pequenos conjuntos de dados; Consiste em passar sempre o menor valor da lista para a primeira posição, depois, o de segundo menor valor para a segunda posição, e assim sucessivamente com os (n-1) elementos restantes, até os últimos dois elementos.
Selection Sort Algoritmo: procurar o menor elemento e trocar com o elemento na primeira posição; procurar o segundo menor elemento e trocar com o elemento na segunda posição; proceder assim até a ordenação estar completa. Implementação: Laços de repetição aninhados.
Selection Sort (simulação) Dados originais 1ª Iteração 2ª Iteração
Selection Sort (simulação) 3ª Iteração 4ª Iteração Neste caso não há troca
Algoritmo - Selection Sort void selectionsort(int* vet, int tam) { } int i, j, min; for (i = 0; i < (tam-1); i++) { min = i; } for (j = (i+1); j < tam; j++) { if(vet[j] < vet[min]) min = j; } if (i!= min) { troca(&vet[i],&vet[min]); }
Aula 14 Insertion Sort Universidade Federal de Santa Maria Colégio Agrícola de Frederico Westphalen Curso Superior de Tecnologia em Sistemas para Internet Prof. Bruno B. Boniati www.cafw.ufsm.br/~bruno
Ordenação por Inserção http://www.sorting-algorithms.com
Insertion Sort Ordenação por inserção; Consiste em percorrer uma lista de elementos da esquerda para a direita e à medida em que se avança os elementos mais à esquerda vão sendo ordenados. É como se o elemento a ser analisado fosse inserido no local correto da lista movimentando os demais elementos para a direita;
Insertion Sort Algoritmo: O insertion sort consiste em manter os i primeiros elementos ordenados entre si. No passo i, insere o i+1 elemento na posição correta entre os i primeiros. No passo i+1, insere o i+2 elemento na posição correta entre os i+1 primeiros. No passo i+2, insere o i+3 elemento na posição correta entre os i+2 primeiros.... A inserção do item em uma posição adequada é realizada movendo-se as chaves maiores para a direita de forma a criar uma posição vazia.
Insertion Sort (simulação) Dados originais 1ª Iteração 2ª Iteração
Insertion Sort (simulação) 3ª Iteração 4ª Iteração Dados Ordenados
Algoritmo Insertion Sort void insertionsort(int* vet, int tam) { int i, j, chave; } for(j=1; j<tam; j++) { chave = vet[j]; i = j-1; while(i >= 0 && vet[i] > chave) { vet[i+1] = vet[i]; i--; } vet[i+1] = chave; }
Exercícios para fixação
Que tal implementar uma aplicação para medir o tempo de execução de diferentes algoritmos de ordenação? Experimente vetores de igual tamanho em diferentes ordens (já ordenados, ordem aleatório, ordem inversa); Incremente essa aplicação ao longo das aulas incluindo todos os algoritmos estudados até então.