21
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 - Frederico Westphalenbruno/disciplinas/estrutura_dados/slides/aula13... · Algoritmos de ordenação são normalmente aplicados em listas que

Embed Size (px)

Citation preview

Page 1: Algoritmos para ordenação de dados - Frederico Westphalenbruno/disciplinas/estrutura_dados/slides/aula13... · Algoritmos de ordenação são normalmente aplicados em listas que

Ordenação - Motivação

Universidade Federal de Santa MariaColégio Agrícola de Frederico WestphalenCurso Superior de Tecnologia em Sistemas para Internet

Prof. Bruno B. Boniati – www.cafw.ufsm.br/~bruno

Page 2: Algoritmos para ordenação de dados - Frederico Westphalenbruno/disciplinas/estrutura_dados/slides/aula13... · Algoritmos de ordenação são normalmente aplicados em listas que

Algoritmos para ordenação de dados

Page 3: Algoritmos para ordenação de dados - Frederico Westphalenbruno/disciplinas/estrutura_dados/slides/aula13... · Algoritmos de ordenação são normalmente aplicados em listas que

• 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);

Page 4: Algoritmos para ordenação de dados - Frederico Westphalenbruno/disciplinas/estrutura_dados/slides/aula13... · Algoritmos de ordenação são normalmente aplicados em listas que

Sorting• Requisitos:

Eficácia de Tempo de execução (devem ser rápidos);Consumo de memória (devem ocupar pouca memória);

• AplicaçãoAlgoritmos 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.

Page 5: Algoritmos para ordenação de dados - Frederico Westphalenbruno/disciplinas/estrutura_dados/slides/aula13... · Algoritmos de ordenação são normalmente aplicados em listas que

• 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 estabilidadeEstáveis

Em uma reordenação (por outro campo) a ordem original não é alterada;

InstáveisSe 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).

Page 6: Algoritmos para ordenação de dados - Frederico Westphalenbruno/disciplinas/estrutura_dados/slides/aula13... · Algoritmos de ordenação são normalmente aplicados em listas que

Aula 13 – Selection Sort

Universidade Federal de Santa MariaColégio Agrícola de Frederico WestphalenCurso Superior de Tecnologia em Sistemas para Internet

Prof. Bruno B. Boniati – www.cafw.ufsm.br/~bruno

Page 7: Algoritmos para ordenação de dados - Frederico Westphalenbruno/disciplinas/estrutura_dados/slides/aula13... · Algoritmos de ordenação são normalmente aplicados em listas que

Ordenação por Seleção

http://www.sorting-algorithms.com

Page 8: Algoritmos para ordenação de dados - Frederico Westphalenbruno/disciplinas/estrutura_dados/slides/aula13... · Algoritmos de ordenação são normalmente aplicados em listas que

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.

Page 9: Algoritmos para ordenação de dados - Frederico Westphalenbruno/disciplinas/estrutura_dados/slides/aula13... · Algoritmos de ordenação são normalmente aplicados em listas que

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.

Page 10: Algoritmos para ordenação de dados - Frederico Westphalenbruno/disciplinas/estrutura_dados/slides/aula13... · Algoritmos de ordenação são normalmente aplicados em listas que

Selection Sort (simulação)Dados

originais

1ªIteração

2ªIteração

Page 11: Algoritmos para ordenação de dados - Frederico Westphalenbruno/disciplinas/estrutura_dados/slides/aula13... · Algoritmos de ordenação são normalmente aplicados em listas que

Selection Sort (simulação)

3ªIteração

4ªIteração

Neste caso não há troca

Page 12: Algoritmos para ordenação de dados - Frederico Westphalenbruno/disciplinas/estrutura_dados/slides/aula13... · Algoritmos de ordenação são normalmente aplicados em listas que

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]);

}}

}

Page 13: Algoritmos para ordenação de dados - Frederico Westphalenbruno/disciplinas/estrutura_dados/slides/aula13... · Algoritmos de ordenação são normalmente aplicados em listas que

Aula 14 – Insertion Sort

Universidade Federal de Santa MariaColégio Agrícola de Frederico WestphalenCurso Superior de Tecnologia em Sistemas para Internet

Prof. Bruno B. Boniati – www.cafw.ufsm.br/~bruno

Page 14: Algoritmos para ordenação de dados - Frederico Westphalenbruno/disciplinas/estrutura_dados/slides/aula13... · Algoritmos de ordenação são normalmente aplicados em listas que

Ordenação por Inserção

http://www.sorting-algorithms.com

Page 15: Algoritmos para ordenação de dados - Frederico Westphalenbruno/disciplinas/estrutura_dados/slides/aula13... · Algoritmos de ordenação são normalmente aplicados em listas que

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;

Page 16: Algoritmos para ordenação de dados - Frederico Westphalenbruno/disciplinas/estrutura_dados/slides/aula13... · Algoritmos de ordenação são normalmente aplicados em listas que

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+1primeiros.No passo i+2, insere o i+3 elemento na posição correta entre os i+2primeiros....

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.

Page 17: Algoritmos para ordenação de dados - Frederico Westphalenbruno/disciplinas/estrutura_dados/slides/aula13... · Algoritmos de ordenação são normalmente aplicados em listas que

Insertion Sort (simulação)Dados

originais

1ªIteração

2ªIteração

Page 18: Algoritmos para ordenação de dados - Frederico Westphalenbruno/disciplinas/estrutura_dados/slides/aula13... · Algoritmos de ordenação são normalmente aplicados em listas que

Insertion Sort (simulação)

3ªIteração

4ªIteração

Dados Ordenados

Page 19: Algoritmos para ordenação de dados - Frederico Westphalenbruno/disciplinas/estrutura_dados/slides/aula13... · Algoritmos de ordenação são normalmente aplicados em listas que

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;

}}

Page 20: Algoritmos para ordenação de dados - Frederico Westphalenbruno/disciplinas/estrutura_dados/slides/aula13... · Algoritmos de ordenação são normalmente aplicados em listas que

Exercícios para fixação

Page 21: Algoritmos para ordenação de dados - Frederico Westphalenbruno/disciplinas/estrutura_dados/slides/aula13... · Algoritmos de ordenação são normalmente aplicados em listas que

• 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.