A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Algoritmos de Ordenação

Apresentações semelhantes


Apresentação em tema: "Algoritmos de Ordenação"— Transcrição da apresentação:

1 Algoritmos de Ordenação
Problema: encontrar um número de telefone em uma lista telefônica simplificado pelo fato dos nomes estarem em ordem alfabética e se estivesse sem uma ordem? Problema: busca de um livro em uma biblioteca a cada livro é atribuída uma posição relativa a outros e portanto pode ser recuperado em um tempo hábil

2 Algoritmos de Ordenação
Terminologia básica seqüência de n ítens ou elementos (registros) r[0], r[1], ……….r[n-1] a chave a[i] está associada ao elemento r[i] usualmente a chave é um campo do registro os elementos estão classificados pela chave se i < j então a[i] precede a[j] No exemplo do caderno de telefones o arquivo consiste de todas as entradas. Cada entrada é um registro, a chave na qual está sorteado é o nome do dono do telefone

3 Terminologia básica a ordenação tem por objetivo rearrumar as chaves de forma que obedeçam a uma regra (ex.: ordem numérica ou alfabética) se os elementos representam registros de um arquivo, sendo representado por uma lista sequencial em memória principal a ordenação é interna se o arquivo estiver em memória secundária a ordenação é externa

4   Terminologia básica a ordenação pode ser por : contiguidade física, valor indireto de ordenação e encadeamento os algoritmos podem operar sobre o elemento ou sobre uma tabela de ponteiros registro é muito grande: ordenação indireta os registros não são rearrumados e sim os índices

5 Existe uma forte característica física no processo de ordenação,
Contiguidade física: Existe uma forte característica física no processo de ordenação, Os elementos de um registro são movimentados de sua posição física original para sua nova posição

6 Não há movimentação das entradas das posições originais.
Vetor indireto de ordenação: Não há movimentação das entradas das posições originais. A classificação é realizada com o apoio de um arquivo-índice. É esse arquivo que contém apontadores para os registros reais, os quais são mantidos classificados

7 Também não há a movimentação dos registros das posições originais.
Encadeamento: Também não há a movimentação dos registros das posições originais. A ordem desejada é conseguida pelo uso de uma lista ligada. Coloca-se um campo a mais na tabela para permitir que o próximo registro seja identificado. É necessário utilizar um ponteiro para o primeiro elemento da lista ligada

8 Principais Métodos de Ordenação Interna
Ordenação por inserção: Inserção direta Incrementos decrescentes (shell sort) Ordenação por troca Método da bolha ( buble sort) Método da troca e partição ( quicksort) Ordenação por seleção Seleção direta Seleção em árvore (heapsort)

9 Método da bolha - Bubble Sort
Em cada passo cada elemento é comparado com o próximo Se o elemento estiver fora de ordem a troca é realizada Realizam-se tantos passos quantos forem necessários até que não ocorram mais trocas

10 Bubble Sort 2 6 3 5 7 9 2 3 5 6 7 9 2 6 3 5 7 9 2 3 5 6 7 9 2 3 6 5 7 9

11 Bubble Sort Não ocorreram trocas 2 3 5 6 7 9 2 3 5 6 7 9 2 3 5 6 7 9

12 Bubble Sort BUBBLESORT (V[], n) houveTroca = verdadeiro enquanto houveTroca for verdadeiro faça houveTroca = falso para i de 1 até n-1 faça se V[i] > V[i + 1] então troque V[i] e V[i + 1] de lugar e cab => 3 para 1, ==> abc ==> pgm acima deveria ter contador reinicializado a cada passada e um exit caso contador ficasse 0 Características de Performance dos 3 algoritmos seleção: gasta a maior parte do tempo para achar o mínimo na parte desordenada do array bubble sort: remaneja o máximo possível de objetos em cada estágio: gasta muito tempo impondo alguma ordem a parte restante do array.

13 void bubble(int v[], int qtd)
{ int i, aux; int trocou; trocou = 1; while (trocou) qtd--; trocou = 0; for(i = 0; i < qtd; i++) if(v[i] > v[i + 1]) aux=v[i]; v[i]=v[i+1]; v[i+1]=aux; }

14 Ordenação por Seleção Um dos algoritmos de classificação mais simples:
ache primeiro o menor elemento da lista e troque sua posição com o primeiro elemento ache o segundo menor elemento e troque sua posição com o segundo elemento continue até que toda lista esteja ordenada para cada i de 0 a n-2, troca o menor elemento da sub-lista que vai de i a N-1 com a[i] Esse método é chamado de sort de seleção porque funciona selecionando repetidamente o menor elemento remanescente - ver exemplo da fig 8.1 o programa abaixo é a implementação desse processo:

15 Ordenação por Seleção 9 2 6 3 5 7 inicial
Cada passo acha o menor e o coloca em sua posição 2 9 6 3 5 7 2 3 6 9 5 7 2 3 5 9 6 7 2 3 5 6 9 7 2 3 5 6 7 9

16 void selectionSort(int vetor[],int tam)
{ int i,j; int min,aux; for (i=0;i<tam-2;i++) min=i; for (j=i+1;j<tam-1;j++) if (vetor[j]<vetor[min]) min=j; } aux=vetor[i]; vetor[i]=vetor[min]; vetor[min]=aux;

17 Ordenação por Inserção Direta
Um primeiro elemento está no vetor ordenado e os demais no vetor desordenado Retira-se o primeiro elemento do vetor desordenado. Ao colocá-lo no vetor ordenado, é realizada a devida comparação para inseri-lo na sua posição correta Repete-se o processo até que todos os elementos do vetor desordenado tenham passado para o vetor ordenado

18 Inserção Direta 6 | 3 6 | | | 9 8 | 8 |

19 Inserção Direta InsertionSort(V, n) for j← 2 to n do aux ← V[j]
► insere V[j] na parte ordenada V[1..j-1] i ← j – 1 while i > 0 e V[i] > aux do V[i + 1] ← V[i] i ← i – 1 V[i + 1] ← aux

20 for(i = 1; i < length; ++i)
void insertSort(int a[], int length) { int i, j, value; for(i = 1; i < length; ++i) value = a[i]; for (j = i - 1; j >= 0 && a[j] > value; --j) a[j + 1] = a[j]; a[j+1] = value; }


Carregar ppt "Algoritmos de Ordenação"

Apresentações semelhantes


Anúncios Google