![Page 1: Módulo 10 Aula Expositiva 12 4.3 Ordenação 4.3.1 Seleção (SelectSort) 4.3.2 Intercalação (MergeSort) 4.3.3 Partição (QuickSort) 4.3.4 Dividir para Conquistar](https://reader033.vdocuments.mx/reader033/viewer/2022042705/570638461a28abb8238f308b/html5/thumbnails/1.jpg)
Módulo 10Aula Expositiva 12
4.3 Ordenação4.3.1 Seleção (SelectSort)4.3.2 Intercalação (MergeSort)4.3.3 Partição (QuickSort)4.3.4 Dividir para Conquistar
DCC 001Programação de Computadores
2º Semestre de 2011Prof. Osvaldo Carvalho
![Page 2: Módulo 10 Aula Expositiva 12 4.3 Ordenação 4.3.1 Seleção (SelectSort) 4.3.2 Intercalação (MergeSort) 4.3.3 Partição (QuickSort) 4.3.4 Dividir para Conquistar](https://reader033.vdocuments.mx/reader033/viewer/2022042705/570638461a28abb8238f308b/html5/thumbnails/2.jpg)
Ordenação (“sort”) Problema clássico da Ciência da Computação Dado um vetor A, obter outro vetor com os mesmos
elementos de A dispostos em ordem crescente (ou decrescente)
1 2 3 4 5 6 7
34 56 27 45 12 44 341 2 3 4 5 6 7
12 27 34 34 44 45 56
Vetor não ordenado
Vetor ordenado
2DCC001 - 2011-2
![Page 3: Módulo 10 Aula Expositiva 12 4.3 Ordenação 4.3.1 Seleção (SelectSort) 4.3.2 Intercalação (MergeSort) 4.3.3 Partição (QuickSort) 4.3.4 Dividir para Conquistar](https://reader033.vdocuments.mx/reader033/viewer/2022042705/570638461a28abb8238f308b/html5/thumbnails/3.jpg)
Conjunto Desordenado
DCC001 - 2011-2 3
![Page 4: Módulo 10 Aula Expositiva 12 4.3 Ordenação 4.3.1 Seleção (SelectSort) 4.3.2 Intercalação (MergeSort) 4.3.3 Partição (QuickSort) 4.3.4 Dividir para Conquistar](https://reader033.vdocuments.mx/reader033/viewer/2022042705/570638461a28abb8238f308b/html5/thumbnails/4.jpg)
Conjunto Ordenado
DCC001 - 2011-2 4
![Page 5: Módulo 10 Aula Expositiva 12 4.3 Ordenação 4.3.1 Seleção (SelectSort) 4.3.2 Intercalação (MergeSort) 4.3.3 Partição (QuickSort) 4.3.4 Dividir para Conquistar](https://reader033.vdocuments.mx/reader033/viewer/2022042705/570638461a28abb8238f308b/html5/thumbnails/5.jpg)
Ordenação por Seleção e Troca
Em inglês, Select Sort Cabeçalho da função:
function sA = SelectSort(A) // Constrói o vetor sA com os // mesmos elementos do vetor A // dispostos em ordem crescente.endfunction
5DCC001 - 2011-2
![Page 6: Módulo 10 Aula Expositiva 12 4.3 Ordenação 4.3.1 Seleção (SelectSort) 4.3.2 Intercalação (MergeSort) 4.3.3 Partição (QuickSort) 4.3.4 Dividir para Conquistar](https://reader033.vdocuments.mx/reader033/viewer/2022042705/570638461a28abb8238f308b/html5/thumbnails/6.jpg)
Ordenação por Seleção e Troca: Raciocínio Indutivo
Suponhamos que as k-1 primeiras posições do vetor A já contenham elementos em suas posições finais
Selecionamos o menor valor entre A(k) e A(length(A))
Trocamos o valor deste menor elemento com o valor em A(k), e fazemos k = k+1
Terminamos quando k = length(A)-1 O algoritmo se inicia com k igual a 1 6DCC001 - 2011-2
![Page 7: Módulo 10 Aula Expositiva 12 4.3 Ordenação 4.3.1 Seleção (SelectSort) 4.3.2 Intercalação (MergeSort) 4.3.3 Partição (QuickSort) 4.3.4 Dividir para Conquistar](https://reader033.vdocuments.mx/reader033/viewer/2022042705/570638461a28abb8238f308b/html5/thumbnails/7.jpg)
Passos da Ordenação por Seleção1 2 3 4 5 6 7
34 56 27 45 12 44 341 2 3 4 5 6 7
12 56 27 45 34 44 341 2 3 4 5 6 7
12 27 56 45 34 44 341 2 3 4 5 6 7
12 27 34 45 56 44 341 2 3 4 5 6 7
12 27 34 34 56 44 451 2 3 4 5 6 7
12 27 34 34 44 56 451 2 3 4 5 6 7
12 27 34 34 44 45 567DCC001 - 2011-2
![Page 8: Módulo 10 Aula Expositiva 12 4.3 Ordenação 4.3.1 Seleção (SelectSort) 4.3.2 Intercalação (MergeSort) 4.3.3 Partição (QuickSort) 4.3.4 Dividir para Conquistar](https://reader033.vdocuments.mx/reader033/viewer/2022042705/570638461a28abb8238f308b/html5/thumbnails/8.jpg)
Seleção de elementos a trocar de posição
DCC001 - 2011-2 8
![Page 9: Módulo 10 Aula Expositiva 12 4.3 Ordenação 4.3.1 Seleção (SelectSort) 4.3.2 Intercalação (MergeSort) 4.3.3 Partição (QuickSort) 4.3.4 Dividir para Conquistar](https://reader033.vdocuments.mx/reader033/viewer/2022042705/570638461a28abb8238f308b/html5/thumbnails/9.jpg)
Ordenação por Seleção Segunda Versão
function sA = SelectSort(A) for k = 1:length(A)-1 // Seleciona a posição entre A(k) e // A(length(A)) que contém o menor valor // Troca o valor de A(k) com o valor na // posição selecionada. end sA = A;endfunction
9DCC001 - 2011-2
![Page 10: Módulo 10 Aula Expositiva 12 4.3 Ordenação 4.3.1 Seleção (SelectSort) 4.3.2 Intercalação (MergeSort) 4.3.3 Partição (QuickSort) 4.3.4 Dividir para Conquistar](https://reader033.vdocuments.mx/reader033/viewer/2022042705/570638461a28abb8238f308b/html5/thumbnails/10.jpg)
Troca de Valores de Duas Variáveis
Se fizermos x = y; y = x; o valor antigo de x que queríamos armazenar em y é perdido
Se fizermos y = x; x = y; teremos o problema inverso
Solução: variável temporária:temp = x; x = y; y = temp;
10DCC001 - 2011-2
![Page 11: Módulo 10 Aula Expositiva 12 4.3 Ordenação 4.3.1 Seleção (SelectSort) 4.3.2 Intercalação (MergeSort) 4.3.3 Partição (QuickSort) 4.3.4 Dividir para Conquistar](https://reader033.vdocuments.mx/reader033/viewer/2022042705/570638461a28abb8238f308b/html5/thumbnails/11.jpg)
Função MinimoPosPrimeira Versão
Parece com a função Minimo que teremos que modificar para ter como parâmetro extra de entrada a
parte do vetor considerada ter também como parâmetro de saída a
posição do elemento de menor valor, e não apenas o seu valor
11DCC001 - 2011-2
![Page 12: Módulo 10 Aula Expositiva 12 4.3 Ordenação 4.3.1 Seleção (SelectSort) 4.3.2 Intercalação (MergeSort) 4.3.3 Partição (QuickSort) 4.3.4 Dividir para Conquistar](https://reader033.vdocuments.mx/reader033/viewer/2022042705/570638461a28abb8238f308b/html5/thumbnails/12.jpg)
A Função Minimo
function m = Minimo(A) // Encontra o menor valor presente no vetor A m = A(1); for k = 2:length(A) if m > A(k) m = A(k); end endendfunction
12DCC001 - 2011-2
![Page 13: Módulo 10 Aula Expositiva 12 4.3 Ordenação 4.3.1 Seleção (SelectSort) 4.3.2 Intercalação (MergeSort) 4.3.3 Partição (QuickSort) 4.3.4 Dividir para Conquistar](https://reader033.vdocuments.mx/reader033/viewer/2022042705/570638461a28abb8238f308b/html5/thumbnails/13.jpg)
Função MinimoPosVersão Final
function [m, im] = MinimoPos(A,low,high) // Encontra o menor valor (m) // presente no vetor A entre as // posições low e high, e informa // sua posição no vetor (im) m = A(low); im = low; for k = low+1:high if m > A(k) m = A(k); im = k; end endendfunction
13DCC001 - 2011-2
![Page 14: Módulo 10 Aula Expositiva 12 4.3 Ordenação 4.3.1 Seleção (SelectSort) 4.3.2 Intercalação (MergeSort) 4.3.3 Partição (QuickSort) 4.3.4 Dividir para Conquistar](https://reader033.vdocuments.mx/reader033/viewer/2022042705/570638461a28abb8238f308b/html5/thumbnails/14.jpg)
Programa MinimoPos_teste.sce// Programa que testa a função MinimoPosexec("MinimoPos.sci");exec("PrintMatrix.sci");
a = int(10*rand(1,10));PrintMatrix("A",a);inicio = input("Inicio = ");fim = input("Fim = ");while inicio > 0 [m im] = MinimoPos(a,inicio,fim) inicio = input("Inicio = "); fim = input("Fim = ");end
14DCC001 - 2011-2
![Page 15: Módulo 10 Aula Expositiva 12 4.3 Ordenação 4.3.1 Seleção (SelectSort) 4.3.2 Intercalação (MergeSort) 4.3.3 Partição (QuickSort) 4.3.4 Dividir para Conquistar](https://reader033.vdocuments.mx/reader033/viewer/2022042705/570638461a28abb8238f308b/html5/thumbnails/15.jpg)
Função SelectSortVersão Final
function sA = SelectSort(A) for k = 1:length(A)-1 // Seleciona a posição entre A(k) e // A(length(A)) que contém o menor valor [Min iMin] = MinimoPos(A,k,length(A)); // Troca os valores de A(k) com o valor // na posição selecionada. temp = A(k); A(k) = A(iMin); A(iMin) = temp; end sA = A;endfunction
15DCC001 - 2011-2
![Page 16: Módulo 10 Aula Expositiva 12 4.3 Ordenação 4.3.1 Seleção (SelectSort) 4.3.2 Intercalação (MergeSort) 4.3.3 Partição (QuickSort) 4.3.4 Dividir para Conquistar](https://reader033.vdocuments.mx/reader033/viewer/2022042705/570638461a28abb8238f308b/html5/thumbnails/16.jpg)
ComplexidadeOrdenação por Seleção
O primeiro passo realiza n-1 comparações;
O segundo, n-2; o terceiro, n-3, e assim por diante, até o último passo, que faz 1 comparação
Nós dizemos que este algoritmo é O(n2), ou que tem complexidade quadrática
16DCC001 - 2011-2
![Page 17: Módulo 10 Aula Expositiva 12 4.3 Ordenação 4.3.1 Seleção (SelectSort) 4.3.2 Intercalação (MergeSort) 4.3.3 Partição (QuickSort) 4.3.4 Dividir para Conquistar](https://reader033.vdocuments.mx/reader033/viewer/2022042705/570638461a28abb8238f308b/html5/thumbnails/17.jpg)
Teste de DesempenhoOrdenação por Seleção
n=5000
90s
17DCC001 - 2011-2
![Page 18: Módulo 10 Aula Expositiva 12 4.3 Ordenação 4.3.1 Seleção (SelectSort) 4.3.2 Intercalação (MergeSort) 4.3.3 Partição (QuickSort) 4.3.4 Dividir para Conquistar](https://reader033.vdocuments.mx/reader033/viewer/2022042705/570638461a28abb8238f308b/html5/thumbnails/18.jpg)
Ordenação por Intercalação(Merge Sort)
DCC001 - 2011-2 18
![Page 19: Módulo 10 Aula Expositiva 12 4.3 Ordenação 4.3.1 Seleção (SelectSort) 4.3.2 Intercalação (MergeSort) 4.3.3 Partição (QuickSort) 4.3.4 Dividir para Conquistar](https://reader033.vdocuments.mx/reader033/viewer/2022042705/570638461a28abb8238f308b/html5/thumbnails/19.jpg)
Intercalação Intercalação (merge) é uma operação
que produz um vetor ordenado a partir de dois outros já ordenados1 2 3 4 1 2 3 4 5 6
15 15 19 22 10 16 19 20 23 27
1 2 3 4 5 6 7 8 9 1010 15 15 16 19 19 20 22 23 27
a b
Intercalação de a e b
19DCC001 - 2011-2
![Page 20: Módulo 10 Aula Expositiva 12 4.3 Ordenação 4.3.1 Seleção (SelectSort) 4.3.2 Intercalação (MergeSort) 4.3.3 Partição (QuickSort) 4.3.4 Dividir para Conquistar](https://reader033.vdocuments.mx/reader033/viewer/2022042705/570638461a28abb8238f308b/html5/thumbnails/20.jpg)
Ordenação por Intercalação
Se o tamanho do vetor for maior que 1: divide-se o vetor em duas partes ordena-se cada parte separadamente faz-se a intercalação das partes já
ordenadas senão, o vetor já está ordenado
DCC001 - 2011-2 20
![Page 21: Módulo 10 Aula Expositiva 12 4.3 Ordenação 4.3.1 Seleção (SelectSort) 4.3.2 Intercalação (MergeSort) 4.3.3 Partição (QuickSort) 4.3.4 Dividir para Conquistar](https://reader033.vdocuments.mx/reader033/viewer/2022042705/570638461a28abb8238f308b/html5/thumbnails/21.jpg)
16 12 72 26 54 98 73 0 59 30 25 62 11 61 67 33 2
8 12 72 26 54 98 73 0 59 30 25 62 11 61 67 33 2
4 12 72 26 54 98 73 0 59 30 25 62 11 61 67 33 2
2 12 72 26 54 98 73 0 59 30 25 62 11 61 67 33 2
1 12 72 26 54 98 73 0 59 30 25 62 11 61 67 33 2
2 12 72 26 54 73 98 0 59 25 30 11 62 61 67 2 33
4 12 26 54 72 0 59 73 98 11 25 30 62 2 33 61 67
8 0 12 26 54 59 72 73 98 2 11 25 30 33 61 62 67
16 0 2 11 12 25 26 30 33 54 59 61 62 67 72 73 98
MergeSortExemplo com n = 16 = 24
21DCC001 - 2011-2
![Page 22: Módulo 10 Aula Expositiva 12 4.3 Ordenação 4.3.1 Seleção (SelectSort) 4.3.2 Intercalação (MergeSort) 4.3.3 Partição (QuickSort) 4.3.4 Dividir para Conquistar](https://reader033.vdocuments.mx/reader033/viewer/2022042705/570638461a28abb8238f308b/html5/thumbnails/22.jpg)
10 60 85 6 82 92 56 57 81 5 55
5 60 85 6 82 92 56 57 81 5 55
3 60 85 6 56 57 81
2 60 85 82 92 56 57 5 55
1 60 85 6 82 92 56 57 81 5 55
2 60 85 82 92 56 57 5 55
3 6 60 85 56 57 81
5 6 60 82 85 92 5 55 56 57 81
10 5 6 55 56 57 60 81 82 85 92
MergeSortExemplo com n = 10
22DCC001 - 2011-2
![Page 23: Módulo 10 Aula Expositiva 12 4.3 Ordenação 4.3.1 Seleção (SelectSort) 4.3.2 Intercalação (MergeSort) 4.3.3 Partição (QuickSort) 4.3.4 Dividir para Conquistar](https://reader033.vdocuments.mx/reader033/viewer/2022042705/570638461a28abb8238f308b/html5/thumbnails/23.jpg)
Função MergeSort
function sA = MergeSort(A) if length(A) <= 1 then sA = A; else m = int((1+length(A))/2); sA = Merge(MergeSort(A(1:m)),... MergeSort(A(m+1:length(A)))); endendfunction
23DCC001 - 2011-2
![Page 24: Módulo 10 Aula Expositiva 12 4.3 Ordenação 4.3.1 Seleção (SelectSort) 4.3.2 Intercalação (MergeSort) 4.3.3 Partição (QuickSort) 4.3.4 Dividir para Conquistar](https://reader033.vdocuments.mx/reader033/viewer/2022042705/570638461a28abb8238f308b/html5/thumbnails/24.jpg)
A Função Merge - Intercalação
function M = Merge(A,B) pA = 1; pB = 1; pM = 1 while pA <= length(A) & pB <= length(B) if A(pA) <= B(pB) then M(pM) = A(pA); pA = pA+1; else M(pM) = B(pB); pB = pB+1; end pM = pM+1; end// continua....
24DCC001 - 2011-2
“Consome” um elemento
de A“Consome” um elemento
de B
![Page 25: Módulo 10 Aula Expositiva 12 4.3 Ordenação 4.3.1 Seleção (SelectSort) 4.3.2 Intercalação (MergeSort) 4.3.3 Partição (QuickSort) 4.3.4 Dividir para Conquistar](https://reader033.vdocuments.mx/reader033/viewer/2022042705/570638461a28abb8238f308b/html5/thumbnails/25.jpg)
A Função Merge - Arremate // Esgota A while pA <= length(A) M(pM) = A(pA); pM = pM+1; pA = pA+1; end
// Esgota B while pB <= length(B) M(pM) = B(pB); pM = pM+1; pB = pB+1; endendfunction
25DCC001 - 2011-2
![Page 26: Módulo 10 Aula Expositiva 12 4.3 Ordenação 4.3.1 Seleção (SelectSort) 4.3.2 Intercalação (MergeSort) 4.3.3 Partição (QuickSort) 4.3.4 Dividir para Conquistar](https://reader033.vdocuments.mx/reader033/viewer/2022042705/570638461a28abb8238f308b/html5/thumbnails/26.jpg)
Intercalação - Complexidade
Cada passo “consome” um elemento de a ou de b; Se a e b têm tamanhos m e n, respectivamente, a
intercalação de a e b exige no máximo m+n passos
1 2 3 4 1 2 3 4 5 615 15 19 22 10 16 19 20 23 27
1 2 3 4 5 6 7 8 9 1010 15 15 16 19 19 20 22 23 27
a b
Intercalação de a e b
26DCC001 - 2011-2
![Page 27: Módulo 10 Aula Expositiva 12 4.3 Ordenação 4.3.1 Seleção (SelectSort) 4.3.2 Intercalação (MergeSort) 4.3.3 Partição (QuickSort) 4.3.4 Dividir para Conquistar](https://reader033.vdocuments.mx/reader033/viewer/2022042705/570638461a28abb8238f308b/html5/thumbnails/27.jpg)
MergeSort – Complexidade
DCC001 - 2011-2 27
16
8
4
2
1 12 72 26 54 98 73 0 59 30 25 62 11 61 67 33 2
2 12 72 26 54 73 98 0 59 25 30 11 62 61 67 2 33
4 12 26 54 72 0 59 73 98 11 25 30 62 2 33 61 67
8 0 12 26 54 59 72 73 98 2 11 25 30 33 61 62 67
16 0 2 11 12 25 26 30 33 54 59 61 62 67 72 73 98
O trabalho está na fase de intercalação O algoritmo é
16 passos
16 passos
16 passos
16 passos
4 =
log2
(16)
nnO 2log
![Page 28: Módulo 10 Aula Expositiva 12 4.3 Ordenação 4.3.1 Seleção (SelectSort) 4.3.2 Intercalação (MergeSort) 4.3.3 Partição (QuickSort) 4.3.4 Dividir para Conquistar](https://reader033.vdocuments.mx/reader033/viewer/2022042705/570638461a28abb8238f308b/html5/thumbnails/28.jpg)
Teste de DesempenhoOrdenação por Seleção
n=5000
90s
28DCC001 - 2011-2
![Page 29: Módulo 10 Aula Expositiva 12 4.3 Ordenação 4.3.1 Seleção (SelectSort) 4.3.2 Intercalação (MergeSort) 4.3.3 Partição (QuickSort) 4.3.4 Dividir para Conquistar](https://reader033.vdocuments.mx/reader033/viewer/2022042705/570638461a28abb8238f308b/html5/thumbnails/29.jpg)
MergeSort – Teste de Desempenho
50000
60
29DCC001 - 2011-2
![Page 30: Módulo 10 Aula Expositiva 12 4.3 Ordenação 4.3.1 Seleção (SelectSort) 4.3.2 Intercalação (MergeSort) 4.3.3 Partição (QuickSort) 4.3.4 Dividir para Conquistar](https://reader033.vdocuments.mx/reader033/viewer/2022042705/570638461a28abb8238f308b/html5/thumbnails/30.jpg)
Ordenação por Partição(quicksort)
DCC001 - 2011-2 30
![Page 31: Módulo 10 Aula Expositiva 12 4.3 Ordenação 4.3.1 Seleção (SelectSort) 4.3.2 Intercalação (MergeSort) 4.3.3 Partição (QuickSort) 4.3.4 Dividir para Conquistar](https://reader033.vdocuments.mx/reader033/viewer/2022042705/570638461a28abb8238f308b/html5/thumbnails/31.jpg)
Vetor Particionado
DCC001 - 2011-2 31
1 2 3 4 5 6 7 8 9
93 100 56 12 123 100 231 212 112
≤ 100 ≥ 100 Para ordenar um vetor particionado,
basta ordenar cada partição
![Page 32: Módulo 10 Aula Expositiva 12 4.3 Ordenação 4.3.1 Seleção (SelectSort) 4.3.2 Intercalação (MergeSort) 4.3.3 Partição (QuickSort) 4.3.4 Dividir para Conquistar](https://reader033.vdocuments.mx/reader033/viewer/2022042705/570638461a28abb8238f308b/html5/thumbnails/32.jpg)
Vetor Particionado
DCC001 - 2011-2 32
![Page 33: Módulo 10 Aula Expositiva 12 4.3 Ordenação 4.3.1 Seleção (SelectSort) 4.3.2 Intercalação (MergeSort) 4.3.3 Partição (QuickSort) 4.3.4 Dividir para Conquistar](https://reader033.vdocuments.mx/reader033/viewer/2022042705/570638461a28abb8238f308b/html5/thumbnails/33.jpg)
QuickSort, ou Ordenação por Partição
Uso de operação de partição, que divide um vetor com 2 ou mais elementos em três partes: a da esquerda, contendo somente elementos
menores ou iguais ao pivô, a do meio, contendo somente elementos iguais ao
pivô, e a da direita contendo somente elementos maiores
ou iguais ao pivô. Após a partição, o algoritmo é aplicado
recursivamente às partições esquerda e direita
33DCC001 - 2011-2
![Page 34: Módulo 10 Aula Expositiva 12 4.3 Ordenação 4.3.1 Seleção (SelectSort) 4.3.2 Intercalação (MergeSort) 4.3.3 Partição (QuickSort) 4.3.4 Dividir para Conquistar](https://reader033.vdocuments.mx/reader033/viewer/2022042705/570638461a28abb8238f308b/html5/thumbnails/34.jpg)
A Função QuickSort
function sA = quicksort(A) if length(A) > 1 then [l,m,r] = partition(A) sA = [quicksort(l) m quicksort(r)]; else sA = A; endendfunction
34DCC001 - 2011-2
![Page 35: Módulo 10 Aula Expositiva 12 4.3 Ordenação 4.3.1 Seleção (SelectSort) 4.3.2 Intercalação (MergeSort) 4.3.3 Partição (QuickSort) 4.3.4 Dividir para Conquistar](https://reader033.vdocuments.mx/reader033/viewer/2022042705/570638461a28abb8238f308b/html5/thumbnails/35.jpg)
Partições Sucessivas
35DCC001 - 2011-2
14 0 11 6 5 12 2 12 13 6
2 0 5 6 11 12 14 12 13 6
0 2 5 6 11 12 6 12 13 14
0 2 5 6 11 12 6 12 13 14
0 2 5 6 6 12 11 12 13 14
0 2 5 6 6 11 12 12 13 14
0 2 5 6 6 11 12 12 13 14
EsquerdaMeioDireita
x Pivô
![Page 36: Módulo 10 Aula Expositiva 12 4.3 Ordenação 4.3.1 Seleção (SelectSort) 4.3.2 Intercalação (MergeSort) 4.3.3 Partição (QuickSort) 4.3.4 Dividir para Conquistar](https://reader033.vdocuments.mx/reader033/viewer/2022042705/570638461a28abb8238f308b/html5/thumbnails/36.jpg)
A Função Partitionfunction [left,middle,right] = partition(A) pivot = A(int(length(A)/2)); inf = 1; sup = length(A); while sup >= inf while A(inf) < pivot inf = inf+1; end while A(sup) > pivot sup = sup-1; end if sup >= inf then temp = A(inf); A(inf) = A(sup); A(sup) = temp; inf = inf+1; sup = sup-1; end end left = A(1:sup); middle = A(sup+1:inf-1); right = A(inf:length(A));endfunction
36DCC001 - 2011-2
![Page 37: Módulo 10 Aula Expositiva 12 4.3 Ordenação 4.3.1 Seleção (SelectSort) 4.3.2 Intercalação (MergeSort) 4.3.3 Partição (QuickSort) 4.3.4 Dividir para Conquistar](https://reader033.vdocuments.mx/reader033/viewer/2022042705/570638461a28abb8238f308b/html5/thumbnails/37.jpg)
Notas sobre a Função Partition
O pivô é escolhido como o elemento posicionado ao meio do vetor A. Isto não é um requisito do algoritmo, que entretanto exige que o pivô seja um dos elementos de A;
inf é mantido de forma tal que, a qualquer momento, todos os elementos à sua esquerda são menores ou iguais ao pivô. Repare que isto é válido inicialmente, pois não existe nenhum elemento à sua esquerda, e que é mantido válido por todos os comandos;
37DCC001 - 2011-2
![Page 38: Módulo 10 Aula Expositiva 12 4.3 Ordenação 4.3.1 Seleção (SelectSort) 4.3.2 Intercalação (MergeSort) 4.3.3 Partição (QuickSort) 4.3.4 Dividir para Conquistar](https://reader033.vdocuments.mx/reader033/viewer/2022042705/570638461a28abb8238f308b/html5/thumbnails/38.jpg)
Notas sobre a Função Partition
sup é mantido de forma tal que, a qualquer momento, todos os elementos à sua direita são maiores ou iguais ao pivô; a argumentação para esta afirmativa é análoga à empregada para a variável inf;
inf avança sempre para a direita, e sup para a esquerda; o loop principal para quando estes dois ponteiros se cruzam;
38DCC001 - 2011-2
![Page 39: Módulo 10 Aula Expositiva 12 4.3 Ordenação 4.3.1 Seleção (SelectSort) 4.3.2 Intercalação (MergeSort) 4.3.3 Partição (QuickSort) 4.3.4 Dividir para Conquistar](https://reader033.vdocuments.mx/reader033/viewer/2022042705/570638461a28abb8238f308b/html5/thumbnails/39.jpg)
Notas sobre a Função Partition
no primeiro loop interno, inf avança para a direita até encontrar um elemento com valor maior ou igual ao pivô;
no segundo loop interno, sup avança para a esquerda até encontrar um elemento com valor menor ou igual ao pivô;
os elementos encontrados nestes dois loops internos são trocados de posição, a não ser que inf e sup já tenham se cruzado;
39DCC001 - 2011-2
![Page 40: Módulo 10 Aula Expositiva 12 4.3 Ordenação 4.3.1 Seleção (SelectSort) 4.3.2 Intercalação (MergeSort) 4.3.3 Partição (QuickSort) 4.3.4 Dividir para Conquistar](https://reader033.vdocuments.mx/reader033/viewer/2022042705/570638461a28abb8238f308b/html5/thumbnails/40.jpg)
QuickSort - Complexidade
Melhor Caso O pivô é tal que cada partição divide o vetor ao
meio São feitas n log(n) comparações
Pior Caso O pivô é tal que cada partição produz uma parte
com um elemento, e outra com n-1 elementos A complexidade é quadrática -
Prática Na prática os casos ruins são raros, e o QuickSort
apresenta um excelente desempenho 40DCC001 - 2011-2
2nO
![Page 41: Módulo 10 Aula Expositiva 12 4.3 Ordenação 4.3.1 Seleção (SelectSort) 4.3.2 Intercalação (MergeSort) 4.3.3 Partição (QuickSort) 4.3.4 Dividir para Conquistar](https://reader033.vdocuments.mx/reader033/viewer/2022042705/570638461a28abb8238f308b/html5/thumbnails/41.jpg)
DCC001 - 2011-2 41
![Page 42: Módulo 10 Aula Expositiva 12 4.3 Ordenação 4.3.1 Seleção (SelectSort) 4.3.2 Intercalação (MergeSort) 4.3.3 Partição (QuickSort) 4.3.4 Dividir para Conquistar](https://reader033.vdocuments.mx/reader033/viewer/2022042705/570638461a28abb8238f308b/html5/thumbnails/42.jpg)
DCC001 - 2011-2 42
![Page 43: Módulo 10 Aula Expositiva 12 4.3 Ordenação 4.3.1 Seleção (SelectSort) 4.3.2 Intercalação (MergeSort) 4.3.3 Partição (QuickSort) 4.3.4 Dividir para Conquistar](https://reader033.vdocuments.mx/reader033/viewer/2022042705/570638461a28abb8238f308b/html5/thumbnails/43.jpg)
MergeSort – Teste de Desempenho
50000
60
43DCC001 - 2011-2
![Page 44: Módulo 10 Aula Expositiva 12 4.3 Ordenação 4.3.1 Seleção (SelectSort) 4.3.2 Intercalação (MergeSort) 4.3.3 Partição (QuickSort) 4.3.4 Dividir para Conquistar](https://reader033.vdocuments.mx/reader033/viewer/2022042705/570638461a28abb8238f308b/html5/thumbnails/44.jpg)
Desempenho Quicksort
DCC001 - 2011-2 44
700.000
![Page 45: Módulo 10 Aula Expositiva 12 4.3 Ordenação 4.3.1 Seleção (SelectSort) 4.3.2 Intercalação (MergeSort) 4.3.3 Partição (QuickSort) 4.3.4 Dividir para Conquistar](https://reader033.vdocuments.mx/reader033/viewer/2022042705/570638461a28abb8238f308b/html5/thumbnails/45.jpg)
Desempenho QuicksortElementos Ordenados por Segundo
DCC001 - 2011-2 45
![Page 46: Módulo 10 Aula Expositiva 12 4.3 Ordenação 4.3.1 Seleção (SelectSort) 4.3.2 Intercalação (MergeSort) 4.3.3 Partição (QuickSort) 4.3.4 Dividir para Conquistar](https://reader033.vdocuments.mx/reader033/viewer/2022042705/570638461a28abb8238f308b/html5/thumbnails/46.jpg)
Dividir para Conquistar MergeSort e QuickSort são exemplos de uma
estratégia clássica em computação Dado um problema de tamanho n
O problema é dividido em 2 subproblemas de tamanho n/2 (ou 3 de tamanho n/3, ou...)
Cada subproblema é atacado recursivamente, com a mesma estratégia, a não ser que o seu tamanho seja suficientemente pequeno para permitir uma solução direta
As soluções dos subproblemas são combinadas para resolver o problema original
46DCC001 - 2011-2
![Page 47: Módulo 10 Aula Expositiva 12 4.3 Ordenação 4.3.1 Seleção (SelectSort) 4.3.2 Intercalação (MergeSort) 4.3.3 Partição (QuickSort) 4.3.4 Dividir para Conquistar](https://reader033.vdocuments.mx/reader033/viewer/2022042705/570638461a28abb8238f308b/html5/thumbnails/47.jpg)
Conclusões
Um mesmo problema pode admitir diversas soluções, cujo desempenho pode variar significativamente
Para problemas grandes a adoção de soluções mais elaboradas pode ser um imperativo
Recursividade é uma ferramenta poderosa para a descoberta e descrição de algoritmos
47DCC001 - 2011-2