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

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

Linguagem de Programação IX Métodos de Ordenação

Apresentações semelhantes


Apresentação em tema: "Linguagem de Programação IX Métodos de Ordenação"— Transcrição da apresentação:

1 Linguagem de Programação IX Métodos de Ordenação
CST EM ANÁLISE E DESENVOLVIMENTO DE SISTEMA Linguagem C Linguagem de Programação IX Métodos de Ordenação Joseane Alves Freire 2ª Semestre 2009

2 Ordenação Ordenação é o processo de arranjar um conjunto de informações semelhantes numa ordem crescente ou decrescente A utilidade destes algoritmos está na resolução de problemas como: pesquisa (lista telefónica); agrupar elementos repetidos: (7, 1, 2, 7, 2, 5) -> (1, 2, 2, 5, 7, 7) ou (7, 7, 5, 2, 2, 1). Dado um vector V de N inteiros (caso mais simples), pretende-se construir um algoritmo que, após a sua execução, deixe o vector V ordenado por ordem crescente: V[0] ≤ V[1] ≤ V[2] ≤ ... ≤ V[N-1].

3 Ordenação Existem três métodos gerais para ordenar:
Por seleção Por troca Por inserção Critério de avaliação dos algoritmos Em que velocidade ele ordena os elementos no caso médio, no pior e no melhor caso? A velocidade está diretamente relacionada ao número de comparações e o número de trocas que ocorrem.

4 Ordenação por seleção Como ordenar as cartas de um baralho utilizando o método de seleção? Espalhe as cartas na mesa Selecione a carta de menor valor e segure em sua mão Repita este processo até que todas as cartas estejam em sua mão

5 Ordenação por seleção – Algoritmos 1
Para a 1ª posição do vetor (V[0]) Encontrar a posição do menor elemento (pos_menor) entre V[0] e V[N-1] (percorre todo o vetor) Trocar o elemento da pos_menor com o elemento da 1ª posição Para a 2ª posição (V[1]) Encontra a posição do menor elemento (pos_menor) entre V[1] e V[N-1] Trocar o elemento da pos_menor com o elemento da 2ª posição . . . Para a N-ésima posição (V[N-1]) Encontrar a posição do menor elemento (pos_menor) de V[N-1] a V[N-1]. Como só falta um elemento para ordenar, V[N-1], este encontra-se automaticamente ordenado (é o maior elemento de todos). Acessar o aplicativo de ordenação em

6 Ordenação por seleção – Algoritmos 2
Para k desde 0 até N-2 fazer: pos_menor = k Para kk desde k+1 até N-1 fazer: Se (V[kk] < V[pos_menor]) então pos_menor = kk Trocar V[pos_menor] com V[k] Fim Para fazer a troca: aux = V[pos_menor] V[pos_menor] = V[k] V[k] = aux Código em C: vide arquivo a ser enviado

7 Ordenação por seleção Avaliando o método
O laço mais externo é executado n-1 vezes e o laço interno ½(n) vezes. Assim Teremos ½(n² - n) comparações Muito ineficiente!!! Algoritmo quadrático

8 Ordenação por troca Ordenação Bolha – “bubble sort”
Consiste em comparar 2 elementos consecutivos e, se estiverem desordenados, trocá-los entre si. Desta forma, os maiores elementos tendem a deslocar-se para a direita e os menores para a esquerda do vetor. O vetor fica ordenado quando após várias passagem pelo vetor com pelo menos uma troca, não há qualquer troca na atual passagem. No exemplo do baralho para ordenar através deste método espalhe as cartas do baralho na mesa e vá trocando cada dupla de carta desordenada.

9 Ordenação por troca Ordenação Bolha – “bubble sort”- Algoritmo
Fazer: Num_trocas = 0; Para k desde 0 até N-2 fazer: Se (V[k] > V[k+1]) então Trocar V[k] com V[k+1] Num_trocas = Num_trocas + 1 Enquanto (Num_trocas != 0) Código em C: vide arquivo a ser enviado

10 Ordenação por troca Avaliando o método Vide capítulo 19 do livro.
O laço mais externo é executado n-1 vezes e o laço interno ½(n) vezes. Assim Teremos ½(n² - n) comparações para o pior caso (lista invertida) No melhor caso faremos apenas n-1 comparações. Muito ineficiente!!! Algoritmo quadrático Vide capítulo 19 do livro.

11 Ordenação por inserção
Inicialmente é ordenado os dois primeiros elementos do vetor Em seguida o algoritmo insere o terceiro elemento na sua posição ordenada com relação aos dois primeiros membros. O processo continua até que todos os elementos tenham sido ordenados Exemplo: Inicial { d, c, a b} Passo 1 {c, d, a, b} Passo 2 {a, c, d, b} Passo 3 {a, b, c, d} Código em C: vide arquivo a ser enviado

12 Ordenação por inserção
Avaliando o método Se a lista estiver ordenada teremos n-1 comparações – melhor caso Se estiver fora de ordem teremos ½(n² - n) comparações - pior caso Muito ineficiente!!! Algoritmo quadrático

13 Ordenação Todos os métodos visto até o momento são lentos, de ordem quadrática Existe algoritmo melhor? Sim. Veremos a seguir os métodos de ordenação Shellshort Quicksort

14 Ordenação Shellsort Este método tem o nome de seu inventor D. L. Shell. O método é baseado no de inserção Veja figura abaixo: primeiro todos os elementos que estão três posições afastados um do outro são ordenados. Em seguida, todos os elementos que estão duas posições afastados são ordenados. Finalmente, todos os elementos adjacentes são ordenados.

15 Ordenação Shellsort A análise desta ordenação apresenta alguns problemas matemáticos que estão além do escopo desta disciplina. O tempo de execução é proporcional a Veja na figura ao lado a comparação dos métodos de ordenação quadrático e o shell

16 Ordenação Quicksort Este método de ordenação é superior a todas as outras ordenações apresentadas anteriormente Ele é baseado no método de trocas O quicksort é baseado na idéias de PARTIÇÕES. Primeiro selecionamos um valor chamado “comparando” e então faz-se a partição do vetor em duas seções: Todos os elementos maiores ou iguais ao valor de um lado Todos os menores elementos de outro Este processo é repetido para cada seção restante até que a matriz esteja ordenada. Exemplo: Início {f e d a c b} => vamos escolher o valor d para a partição Passo1 {|b c a| |d e f|} => b, c e a são menores que d; e por sua vez d, e e f são maiores ou igual. Passo2 {b c a} => aplicamos o mesmo método para cada uma das partições => {a, b, c}

17 Ordenação Quicksort Exemplo: Como selecionar o valor do “comparando”
Passo3 {d e f} => {d e f} Até que o vetor esteja totalmente ordenado {a, b, c, d, e, f} Algoritmo recursivo!! Como selecionar o valor do “comparando” Escolha aleatória Ou média de um pequeno conjunto de valores retirado da matriz O ideal seria encontrar um valor que estivesse precisamente no centro da faixa de valores. Código em C: vide arquivo a ser enviado

18 Ordenação Quicksort Avaliação do método
O cálculo de sua complexidade está fora do escopo desta disciplina, mas é sabido que o número médio de comparações é n log n Este número é bem melhor que aqueles vistos até o momento


Carregar ppt "Linguagem de Programação IX Métodos de Ordenação"

Apresentações semelhantes


Anúncios Google