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
CONTEÚDO (1) Auto-avaliação (2) QuickSort (3) MergeSort

2 Ordenação/Classificação
(1) Auto-avaliação Ordenação/Classificação Antes de prosseguir: Considerando o vetor de inteiros a seguir, execute os algoritmos vistos na aula passada (insertionSort e selectionSort), e escreva as alterações realizadas nesse vetor, em cada iteração realizada vetor iteração 4 8 3 2 1 7 ...

3 É um paradigma geral de projeto de algoritmos:
(2) QuickSort Dividir e Conquistar É um paradigma geral de projeto de algoritmos: Dividir: divida os dados de entrada S em dois subconjuntos disjuntos S1 e S2 Recorrência: resolva os subproblemas associados a S1 e S2, geralmente de forma recursiva Conquistar: combine as soluções para S1 e S2 em uma solução para S

4 Encontre um elemento na lista a ser ordenada para servir como o pivô
(2) QuickSort QuickSort É um algoritmo de ordenação baseado no paradigma de dividir e conquistar Encontre um elemento na lista a ser ordenada para servir como o pivô Divida a lista em duas partes - uma com elementos maiores ou iguais ao elemento pivô e a outra com os elementos menores do que pivô. Repita recursivamente o algoritmo para as duas partes da lista original

5 (2) QuickSort Pseudocódigo Quicksort (0,5,v) Algorithm Quicksort(inicio, fim, v) Input initial position, final position, a sequence v Output the sequence v sorted if (inicio >= fim) then return; indicePivo  Partition(inicio, fim, v) Quicksort(inicio, indicePivo-1, v) Quicksort(indicePivo+1, fim, v) 7 4 1 9 3 2 Partition (0,5,v) retorna 4 3 4 1 2 7 9 Quicksort(0,3,v) Quicksort(5,5,v) 3 4 1 2 9 Partition (0,3,v) retorna 2 1 2 3 4 Quicksort(0,1,v) Quicksort(3,3,v) 1 2 4 Partition (0,1,v) retorna 0 1 2 Quicksort(0,-1) Quicksort(A,1,1) return 2

6 Exemplo: Partition (0,5,v)
(2) QuickSort Pseudocódigo Partition(inicio, fim, v) Input initial position, final position, a sequence v Output the position of the pivot element i  inicio f  fim pivo  v[inicio] while(i<f) while(v[i]<=pivo AND i<fim) i  i+1 while (v[f] > pivo) f  f-1 if (i<f) then troca(v[i],v[f]) v[inicio]  v[f] v[f]  pivo return f Exemplo: Partition (0,5,v) i 7 4 1 9 3 2 pivo=7 f i 7 4 1 2 3 9 pivo=7 f 3 4 1 2 7 9 pivo=7 f return 4

7 Também chamado de ordenação por intercalação
(3) MergeSort MergeSort Também chamado de ordenação por intercalação Também baseado no paradigma de dividir e conquistar Divide o vetor a ser ordenado em duas metades aproximadamente iguais Cada metade é ordenada recursivamente e então são intercaladas de volta para formar o vetor final ordenado

8 Princípio: dividir e ordenar
(3) MergeSort Princípio: dividir e ordenar

9 (3) MergeSort Exemplo Realizar Merge-sort em uma sequência de entrada S com n elementos consiste de três passos: Dividir: particionar S em duas sequências S1 e S2 de cerca de n/2 elementos cada Recorrência: aplicar recursivamente a operação Merge-sort em S1 e S2 Conquistar: intercalar S1 e S2 em uma única sequência S ordenada 7 4 1 9 3 2 7 4 1 9 3 2 4 1 3 2 4 1 3 2 Merge Merge 7 1 4 9 2 3 Merge Merge 1 4 7 2 3 9 Merge 1 2 3 4 7 9

10 MergeSort - Dividir 7 4 1 9 3 2 Algorithm mergeSort(ini, post, S)
mergeSort(0,6,S) 7 4 1 9 3 2 Algorithm mergeSort(ini, post, S) Input initial position , final position + 1 and sequence S Output sequence S sorted if (ini<post-1) then mid  (ini+post)/2 Sini-(mid-1)  mergeSort(ini,mid, S) Smid-(post-1)  mergeSort(mid,post,S) Sini-(post-1)  merge(ini,mid,post,S) Return S mergeSort(0,3,S) mergeSort(3,6,S) 7 4 1 9 3 2 mergeSort(0,1,S) mergeSort(1,3,S) mergeSort(3,4,S) mergeSort(4,6,S) 7 4 1 9 3 2 mergeSort(1,2,S) mergeSort(2,3,S) 4 1 mergeSort(4,5,S) mergeSort(5,6,S) 3 2

11 MergeSort - Conquistar
4 1 3 2 Algorithm mergeSort(ini, post, S) Input initial position , final position + 1 and sequence S Output sequence S sorted if (ini<post-1) then mid  (ini+post)/2 Sini-(mid-1)  mergeSort(ini,mid, S) Smid-(post-1)  mergeSort(mid,post,S) Sini-(post-1)  merge(ini,mid,post,S) Return S Merge (1,2,3,S) Merge (4,5,6,S) 7 1 4 9 2 3 Merge (0,1,3,S) Merge (3,4,6,S) 1 4 7 2 3 9 Merge (0,3,6,S) 1 2 3 4 7 9 Possui tempo de execução de O(n log n)

12 Merge Merge Merge Merge Merge Merge 7 4 1 9 3 2 7 4 1 9 3 2 4 1 3 2 4
(3) MergeSort 7 4 1 9 3 2 Algorithm merge(ini, mid, post, S) W empty sequence of size (post-ini) i  ini j  mid k  0 while (i < mid) and (j < post) do if (S[i] <= S[j]) then W[k]  S[i] k  k+1 i  i+1 else W[k]  S[j] k  k+1 j  j+1 while (i < mid) do W[k]  S[i] k  k+1 i  i+1 while (j < post) do W[k]  S[j] k  k+1 j  j+1 for i  ini to post-1 do S[i]  W[i-ini]; Return S 7 4 1 9 3 2 4 1 3 2 4 1 3 2 Merge Merge 7 1 4 9 2 3 Merge Merge 1 4 7 2 3 9 Merge 1 2 3 4 7 9


Carregar ppt "Algoritmos de Ordenação"

Apresentações semelhantes


Anúncios Google