SlideShare uma empresa Scribd logo
1 de 142
Baixar para ler offline
Aula 15 – Algoritmos de Ordena¸c˜ao:
Divis˜ao e Conquista (MergeSort)
Norton Trevisan Roman
norton@usp.br
9 de outubro de 2018
Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 1 / 19
Projeto por Indu¸c˜ao Forte
Segunda Alternativa
Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 2 / 19
Projeto por Indu¸c˜ao Forte
Segunda Alternativa
Base: n = 1. Um conjunto de um ´unico elemento
est´a ordenado
Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 2 / 19
Projeto por Indu¸c˜ao Forte
Segunda Alternativa
Base: n = 1. Um conjunto de um ´unico elemento
est´a ordenado
H.I.: Sei ordenar um conjunto de 1 ≤ k < n valores
Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 2 / 19
Projeto por Indu¸c˜ao Forte
Segunda Alternativa
Base: n = 1. Um conjunto de um ´unico elemento
est´a ordenado
H.I.: Sei ordenar um conjunto de 1 ≤ k < n valores
Passo:
Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 2 / 19
Projeto por Indu¸c˜ao Forte
Segunda Alternativa
Base: n = 1. Um conjunto de um ´unico elemento
est´a ordenado
H.I.: Sei ordenar um conjunto de 1 ≤ k < n valores
Passo:
Seja S um conjunto de n ≥ 2 valores. Podemos particionar
S em dois conjuntos, S1 e S2 , de tamanhos n/2
Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 2 / 19
Projeto por Indu¸c˜ao Forte
Segunda Alternativa
Base: n = 1. Um conjunto de um ´unico elemento
est´a ordenado
H.I.: Sei ordenar um conjunto de 1 ≤ k < n valores
Passo:
Seja S um conjunto de n ≥ 2 valores. Podemos particionar
S em dois conjuntos, S1 e S2 , de tamanhos n/2
Pela H.I., sabemos ordenar os conjuntos S1 e S2. Podemos
ent˜ao obter S ordenado intercalando os conjuntos ordenados
S1 e S2
Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 2 / 19
Projeto por Indu¸c˜ao Forte
Segunda Alternativa
Base: n = 1. Um conjunto de um ´unico elemento
est´a ordenado
H.I.: Sei ordenar um conjunto de 1 ≤ k < n valores
Passo:
Seja S um conjunto de n ≥ 2 valores. Podemos particionar
S em dois conjuntos, S1 e S2 , de tamanhos n/2
Pela H.I., sabemos ordenar os conjuntos S1 e S2. Podemos
ent˜ao obter S ordenado intercalando os conjuntos ordenados
S1 e S2
MergeSort
Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 2 / 19
MergeSort
Passos para ordenar um arranjo A
Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 3 / 19
MergeSort
Passos para ordenar um arranjo A
Dividir:
Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 3 / 19
MergeSort
Passos para ordenar um arranjo A
Dividir:
Divida o arranjo de n elementos em dois sub-arranjos de n/2
elementos cada
Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 3 / 19
MergeSort
Passos para ordenar um arranjo A
Dividir:
Divida o arranjo de n elementos em dois sub-arranjos de n/2
elementos cada
Conquistar:
Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 3 / 19
MergeSort
Passos para ordenar um arranjo A
Dividir:
Divida o arranjo de n elementos em dois sub-arranjos de n/2
elementos cada
Conquistar:
Ordene os dois sub-arranjos recursivamente
Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 3 / 19
MergeSort
Passos para ordenar um arranjo A
Dividir:
Divida o arranjo de n elementos em dois sub-arranjos de n/2
elementos cada
Conquistar:
Ordene os dois sub-arranjos recursivamente
Combinar:
Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 3 / 19
MergeSort
Passos para ordenar um arranjo A
Dividir:
Divida o arranjo de n elementos em dois sub-arranjos de n/2
elementos cada
Conquistar:
Ordene os dois sub-arranjos recursivamente
Combinar:
Intercale os dois sub-arranjos ordenados, de modo a produzir
a resposta ordenada
Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 3 / 19
MergeSort
Passos para ordenar um arranjo A
Podemos ver que a divis˜ao ´e imediata
Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 4 / 19
MergeSort
Passos para ordenar um arranjo A
Podemos ver que a divis˜ao ´e imediata
O arranjo ´e dividido em dois sub-arranjos com metade do
tamanho do original, que s˜ao ordenados recursivamente
Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 4 / 19
MergeSort
Passos para ordenar um arranjo A
Podemos ver que a divis˜ao ´e imediata
O arranjo ´e dividido em dois sub-arranjos com metade do
tamanho do original, que s˜ao ordenados recursivamente
A conquista tamb´em n˜ao ´e dif´ıcil
Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 4 / 19
MergeSort
Passos para ordenar um arranjo A
Podemos ver que a divis˜ao ´e imediata
O arranjo ´e dividido em dois sub-arranjos com metade do
tamanho do original, que s˜ao ordenados recursivamente
A conquista tamb´em n˜ao ´e dif´ıcil
Inevitavelmente vamos parar no caso base, que ´e trivial
Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 4 / 19
MergeSort
Passos para ordenar um arranjo A
Podemos ver que a divis˜ao ´e imediata
O arranjo ´e dividido em dois sub-arranjos com metade do
tamanho do original, que s˜ao ordenados recursivamente
A conquista tamb´em n˜ao ´e dif´ıcil
Inevitavelmente vamos parar no caso base, que ´e trivial
E a combina¸c˜ao?
Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 4 / 19
MergeSort
Passos para ordenar um arranjo A
Podemos ver que a divis˜ao ´e imediata
O arranjo ´e dividido em dois sub-arranjos com metade do
tamanho do original, que s˜ao ordenados recursivamente
A conquista tamb´em n˜ao ´e dif´ıcil
Inevitavelmente vamos parar no caso base, que ´e trivial
E a combina¸c˜ao?
Como intercalar os 2 sub-arranjos ordenados?
Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 4 / 19
MergeSort
Intercala¸c˜ao
void merge(int[] A, int p, int q, int r) {
int i, j, k;
int tamseq1 = q - p + 1;
int tamseq2 = r - q;
int [] seq1 = new int [tamseq1];
for(i=0; i < seq1.length; i++)
seq1[i] = A[p+i];
int [] seq2 = new int [tamseq2];
for(j=0; j < seq2.length; j++)
seq2[j] = A[q+1+j];
...
Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 5 / 19
MergeSort
Intercala¸c˜ao
Arranjo a ser ordenado
void merge(int[] A, int p, int q, int r) {
int i, j, k;
int tamseq1 = q - p + 1;
int tamseq2 = r - q;
int [] seq1 = new int [tamseq1];
for(i=0; i < seq1.length; i++)
seq1[i] = A[p+i];
int [] seq2 = new int [tamseq2];
for(j=0; j < seq2.length; j++)
seq2[j] = A[q+1+j];
...
Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 5 / 19
MergeSort
Intercala¸c˜ao
´ındices no arranjo,
sendo p ≤ q < r
void merge(int[] A, int p, int q, int r) {
int i, j, k;
int tamseq1 = q - p + 1;
int tamseq2 = r - q;
int [] seq1 = new int [tamseq1];
for(i=0; i < seq1.length; i++)
seq1[i] = A[p+i];
int [] seq2 = new int [tamseq2];
for(j=0; j < seq2.length; j++)
seq2[j] = A[q+1+j];
...
Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 5 / 19
MergeSort
Intercala¸c˜ao
O procedimento
assume que os sub-
arranjos A[p..q]
e A[q+1..r] j´a
est˜ao ordenados
void merge(int[] A, int p, int q, int r) {
int i, j, k;
int tamseq1 = q - p + 1;
int tamseq2 = r - q;
int [] seq1 = new int [tamseq1];
for(i=0; i < seq1.length; i++)
seq1[i] = A[p+i];
int [] seq2 = new int [tamseq2];
for(j=0; j < seq2.length; j++)
seq2[j] = A[q+1+j];
...
Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 5 / 19
MergeSort
Intercala¸c˜ao
Os sub-arranjos ser˜ao
ent˜ao intercalados
para formar um ´unico
sub-arranjo ordenado,
substituindo o sub-
arranjo A[p..r] atual
void merge(int[] A, int p, int q, int r) {
int i, j, k;
int tamseq1 = q - p + 1;
int tamseq2 = r - q;
int [] seq1 = new int [tamseq1];
for(i=0; i < seq1.length; i++)
seq1[i] = A[p+i];
int [] seq2 = new int [tamseq2];
for(j=0; j < seq2.length; j++)
seq2[j] = A[q+1+j];
...
Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 5 / 19
MergeSort
Intercala¸c˜ao
Tamanho da
sub-sequˆencia 1
void merge(int[] A, int p, int q, int r) {
int i, j, k;
int tamseq1 = q - p + 1;
int tamseq2 = r - q;
int [] seq1 = new int [tamseq1];
for(i=0; i < seq1.length; i++)
seq1[i] = A[p+i];
int [] seq2 = new int [tamseq2];
for(j=0; j < seq2.length; j++)
seq2[j] = A[q+1+j];
...
Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 5 / 19
MergeSort
Intercala¸c˜ao
Tamanho da
sub-sequˆencia 2
void merge(int[] A, int p, int q, int r) {
int i, j, k;
int tamseq1 = q - p + 1;
int tamseq2 = r - q;
int [] seq1 = new int [tamseq1];
for(i=0; i < seq1.length; i++)
seq1[i] = A[p+i];
int [] seq2 = new int [tamseq2];
for(j=0; j < seq2.length; j++)
seq2[j] = A[q+1+j];
...
Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 5 / 19
MergeSort
Intercala¸c˜ao
Copia A[p..q]
em seq1
void merge(int[] A, int p, int q, int r) {
int i, j, k;
int tamseq1 = q - p + 1;
int tamseq2 = r - q;
int [] seq1 = new int [tamseq1];
for(i=0; i < seq1.length; i++)
seq1[i] = A[p+i];
int [] seq2 = new int [tamseq2];
for(j=0; j < seq2.length; j++)
seq2[j] = A[q+1+j];
...
Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 5 / 19
MergeSort
Intercala¸c˜ao
E A[q+1..r] em seq2
void merge(int[] A, int p, int q, int r) {
int i, j, k;
int tamseq1 = q - p + 1;
int tamseq2 = r - q;
int [] seq1 = new int [tamseq1];
for(i=0; i < seq1.length; i++)
seq1[i] = A[p+i];
int [] seq2 = new int [tamseq2];
for(j=0; j < seq2.length; j++)
seq2[j] = A[q+1+j];
...
Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 5 / 19
MergeSort
Intercala¸c˜ao (cont.)
Juntamos agora
as subsequˆencias
...
k = p; i = 0; j = 0;
while (i < seq1.length && j < seq2.length) {
if(seq2[j] <= seq1[i]) {
A[k] = seq2[j];
j++;
}
else {
A[k] = seq1[i];
i++;
}
k++;
}
...
Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 6 / 19
MergeSort
Intercala¸c˜ao (cont.)
O la¸co vai at´e terminar
a menor subsequˆencia
...
k = p; i = 0; j = 0;
while (i < seq1.length && j < seq2.length) {
if(seq2[j] <= seq1[i]) {
A[k] = seq2[j];
j++;
}
else {
A[k] = seq1[i];
i++;
}
k++;
}
...
Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 6 / 19
MergeSort
Intercala¸c˜ao (cont.)
A[p...] recebe o
menor elemento dentre
as 2 subsequˆencias
...
k = p; i = 0; j = 0;
while (i < seq1.length && j < seq2.length) {
if(seq2[j] <= seq1[i]) {
A[k] = seq2[j];
j++;
}
else {
A[k] = seq1[i];
i++;
}
k++;
}
...
Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 6 / 19
MergeSort
Intercala¸c˜ao (cont.)
Completa com a
subsequˆencia que
ainda n˜ao acabou
...
while (i < seq1.length) {
A[k] = seq1[i];
k++;
i++;
}
while (j < seq2.length) {
A[k] = seq2[j];
k++;
j++;
}
}
Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 7 / 19
MergeSort
Intercala¸c˜ao (cont.)
Ou a primeira...
...
while (i < seq1.length) {
A[k] = seq1[i];
k++;
i++;
}
while (j < seq2.length) {
A[k] = seq2[j];
k++;
j++;
}
}
Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 7 / 19
MergeSort
Intercala¸c˜ao (cont.)
Ou a segunda
...
while (i < seq1.length) {
A[k] = seq1[i];
k++;
i++;
}
while (j < seq2.length) {
A[k] = seq2[j];
k++;
j++;
}
}
Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 7 / 19
MergeSort
Intercala¸c˜ao (cont.)
No final, a sub-
sequˆencia A[p..r]
est´a ordenada
...
while (i < seq1.length) {
A[k] = seq1[i];
k++;
i++;
}
while (j < seq2.length) {
A[k] = seq2[j];
k++;
j++;
}
}
Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 7 / 19
MergeSort
Intercala¸c˜ao: Exemplo
Considere o arranjo A e os ´ındices p, q e r:
3 12 1 8 4 6 10 5 7 12 15 5 2 1 8A
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
p q r
Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 8 / 19
MergeSort
Intercala¸c˜ao: Exemplo
Considere o arranjo A e os ´ındices p, q e r:
3 12 1 8 4 6 10 5 7 12 15 5 2 1 8A
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
p q r
Note que A[p..q] e A[q+1..r] est˜ao ordenados
Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 8 / 19
MergeSort
Intercala¸c˜ao: Exemplo
Considere o arranjo A e os ´ındices p, q e r:
3 12 1 8 4 6 10 5 7 12 15 5 2 1 8A
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
p q r
4 6 10seq1
5 7 12 15seq2
Copiamos A[p..q] em seq1 e A[q+1..r] em seq2
Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 8 / 19
MergeSort
Intercala¸c˜ao: Exemplo
Considere o arranjo A e os ´ındices p, q e r:
3 12 1 8 4 6 10 5 7 12 15 5 2 1 8A
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
p q r
4 6 10seq1
5 7 12 15seq2
A[k] recebe o menor elemento dentre os 2 sub-arranjos
Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 8 / 19
MergeSort
Intercala¸c˜ao: Exemplo
Considere o arranjo A e os ´ındices p, q e r:
3 12 1 8 4 6 10 5 7 12 15 5 2 1 8A
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
p q r
4 6 10seq1
5 7 12 15seq2
A[k] recebe o menor elemento dentre os 2 sub-arranjos
Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 8 / 19
MergeSort
Intercala¸c˜ao: Exemplo
Considere o arranjo A e os ´ındices p, q e r:
3 12 1 8 4 6 10 5 7 12 15 5 2 1 8A
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
p q r
4 6 10seq1
5 7 12 15seq2
A[k] recebe o menor elemento dentre os 2 sub-arranjos
Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 8 / 19
MergeSort
Intercala¸c˜ao: Exemplo
Considere o arranjo A e os ´ındices p, q e r:
3 12 1 8 4 6 10 5 7 12 15 5 2 1 8A
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
p q r
4 6 10seq1
5 7 12 15seq2
A[k] recebe o menor elemento dentre os 2 sub-arranjos
Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 8 / 19
MergeSort
Intercala¸c˜ao: Exemplo
Considere o arranjo A e os ´ındices p, q e r:
3 12 1 8 4 5 10 5 7 12 15 5 2 1 8A
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
p q r
4 6 10seq1
5 7 12 15seq2
A[k] recebe o menor elemento dentre os 2 sub-arranjos
Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 8 / 19
MergeSort
Intercala¸c˜ao: Exemplo
Considere o arranjo A e os ´ındices p, q e r:
3 12 1 8 4 5 10 5 7 12 15 5 2 1 8A
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
p q r
4 6 10seq1
5 7 12 15seq2
A[k] recebe o menor elemento dentre os 2 sub-arranjos
Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 8 / 19
MergeSort
Intercala¸c˜ao: Exemplo
Considere o arranjo A e os ´ındices p, q e r:
3 12 1 8 4 5 6 5 7 12 15 5 2 1 8A
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
p q r
4 6 10seq1
5 7 12 15seq2
A[k] recebe o menor elemento dentre os 2 sub-arranjos
Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 8 / 19
MergeSort
Intercala¸c˜ao: Exemplo
Considere o arranjo A e os ´ındices p, q e r:
3 12 1 8 4 5 6 5 7 12 15 5 2 1 8A
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
p q r
4 6 10seq1
5 7 12 15seq2
A[k] recebe o menor elemento dentre os 2 sub-arranjos
Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 8 / 19
MergeSort
Intercala¸c˜ao: Exemplo
Considere o arranjo A e os ´ındices p, q e r:
3 12 1 8 4 5 6 7 7 12 15 5 2 1 8A
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
p q r
4 6 10seq1
5 7 12 15seq2
A[k] recebe o menor elemento dentre os 2 sub-arranjos
Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 8 / 19
MergeSort
Intercala¸c˜ao: Exemplo
Considere o arranjo A e os ´ındices p, q e r:
3 12 1 8 4 5 6 7 7 12 15 5 2 1 8A
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
p q r
4 6 10seq1
5 7 12 15seq2
A[k] recebe o menor elemento dentre os 2 sub-arranjos
Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 8 / 19
MergeSort
Intercala¸c˜ao: Exemplo
Considere o arranjo A e os ´ındices p, q e r:
3 12 1 8 4 5 6 7 10 12 15 5 2 1 8A
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
p q r
4 6 10seq1
5 7 12 15seq2
A[k] recebe o menor elemento dentre os 2 sub-arranjos
Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 8 / 19
MergeSort
Intercala¸c˜ao: Exemplo
Considere o arranjo A e os ´ındices p, q e r:
3 12 1 8 4 5 6 7 10 12 15 5 2 1 8A
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
p q r
4 6 10seq1
5 7 12 15seq2
A[k] recebe o menor elemento dentre os 2 sub-arranjos
Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 8 / 19
MergeSort
Intercala¸c˜ao: Exemplo
Considere o arranjo A e os ´ındices p, q e r:
3 12 1 8 4 5 6 7 10 12 15 5 2 1 8A
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
p q r
4 6 10seq1
5 7 12 15seq2
A[k] recebe o menor elemento dentre os 2 sub-arranjos
Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 8 / 19
MergeSort
Intercala¸c˜ao: Exemplo
Considere o arranjo A e os ´ındices p, q e r:
3 12 1 8 4 5 6 7 10 12 15 5 2 1 8A
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
p q r
4 6 10seq1
5 7 12 15seq2
A[k] recebe o menor elemento dentre os 2 sub-arranjos
Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 8 / 19
MergeSort
Intercala¸c˜ao: Exemplo
Considere o arranjo A e os ´ındices p, q e r:
3 12 1 8 4 5 6 7 10 12 15 5 2 1 8A
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
p q r
4 6 10seq1
5 7 12 15seq2
A[k] recebe o menor elemento dentre os 2 sub-arranjos
Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 8 / 19
MergeSort
Intercala¸c˜ao: Exemplo
Considere o arranjo A e os ´ındices p, q e r:
3 12 1 8 4 5 6 7 10 12 15 5 2 1 8A
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
p q r
4 6 10seq1
5 7 12 15seq2
E A[p..r] est´a ordenado
Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 8 / 19
MergeSort
Vejamos agora o MergeSort completo
void mergeSort(int[] numeros, int ini, int fim) {
if(ini < fim) {
int meio = (ini + fim)/2;
mergeSort(numeros, ini, meio);
mergeSort(numeros, meio+1, fim);
merge(numeros, ini, meio, fim);
}
}
Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 9 / 19
MergeSort
Vejamos agora o MergeSort completo
Dividir
void mergeSort(int[] numeros, int ini, int fim) {
if(ini < fim) {
int meio = (ini + fim)/2;
mergeSort(numeros, ini, meio);
mergeSort(numeros, meio+1, fim);
merge(numeros, ini, meio, fim);
}
}
Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 9 / 19
MergeSort
Vejamos agora o MergeSort completo
Conquistar
void mergeSort(int[] numeros, int ini, int fim) {
if(ini < fim) {
int meio = (ini + fim)/2;
mergeSort(numeros, ini, meio);
mergeSort(numeros, meio+1, fim);
merge(numeros, ini, meio, fim);
}
}
Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 9 / 19
MergeSort
Vejamos agora o MergeSort completo
Combinar
void mergeSort(int[] numeros, int ini, int fim) {
if(ini < fim) {
int meio = (ini + fim)/2;
mergeSort(numeros, ini, meio);
mergeSort(numeros, meio+1, fim);
merge(numeros, ini, meio, fim);
}
}
Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 9 / 19
MergeSort
C´odigo
void mergeSort(int[] numeros,
int ini, int fim) {
if(ini < fim) {
int meio = (ini + fim)/2;
mergeSort(numeros, ini,
meio);
mergeSort(numeros, meio+1,
fim);
merge(numeros, ini, meio,
fim);
}
}
Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 10 / 19
MergeSort
C´odigo
void mergeSort(int[] numeros,
int ini, int fim) {
if(ini < fim) {
int meio = (ini + fim)/2;
mergeSort(numeros, ini,
meio);
mergeSort(numeros, meio+1,
fim);
merge(numeros, ini, meio,
fim);
}
}
2 8 7 1 3 5 6 4
0 1 2 3 4 5 6 7
ini fim
Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 10 / 19
MergeSort
C´odigo
void mergeSort(int[] numeros,
int ini, int fim) {
if(ini < fim) {
int meio = (ini + fim)/2;
mergeSort(numeros, ini,
meio);
mergeSort(numeros, meio+1,
fim);
merge(numeros, ini, meio,
fim);
}
}
2 8 7 1 3 5 6 4
0 1 2 3 4 5 6 7
ini fim
Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 10 / 19
MergeSort
C´odigo
void mergeSort(int[] numeros,
int ini, int fim) {
if(ini < fim) {
int meio = (ini + fim)/2;
mergeSort(numeros, ini,
meio);
mergeSort(numeros, meio+1,
fim);
merge(numeros, ini, meio,
fim);
}
}
2 8 7 1 3 5 6 4
0 1 2 3 4 5 6 7
ini fimmeio
Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 10 / 19
MergeSort
C´odigo
void mergeSort(int[] numeros,
int ini, int fim) {
if(ini < fim) {
int meio = (ini + fim)/2;
mergeSort(numeros, ini,
meio);
mergeSort(numeros, meio+1,
fim);
merge(numeros, ini, meio,
fim);
}
}
2 8 7 1 3 5 6 4
0 1 2 3 4 5 6 7
ini fimmeio
ini2 fim2
Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 10 / 19
MergeSort
C´odigo
void mergeSort(int[] numeros,
int ini, int fim) {
if(ini < fim) {
int meio = (ini + fim)/2;
mergeSort(numeros, ini,
meio);
mergeSort(numeros, meio+1,
fim);
merge(numeros, ini, meio,
fim);
}
}
2 8 7 1 3 5 6 4
0 1 2 3 4 5 6 7
ini fimmeio
ini2 fim2
Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 10 / 19
MergeSort
C´odigo
void mergeSort(int[] numeros,
int ini, int fim) {
if(ini < fim) {
int meio = (ini + fim)/2;
mergeSort(numeros, ini,
meio);
mergeSort(numeros, meio+1,
fim);
merge(numeros, ini, meio,
fim);
}
}
2 8 7 1 3 5 6 4
0 1 2 3 4 5 6 7
ini fimmeio
ini2 fim2meio2
Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 10 / 19
MergeSort
C´odigo
void mergeSort(int[] numeros,
int ini, int fim) {
if(ini < fim) {
int meio = (ini + fim)/2;
mergeSort(numeros, ini,
meio);
mergeSort(numeros, meio+1,
fim);
merge(numeros, ini, meio,
fim);
}
}
2 8 7 1 3 5 6 4
0 1 2 3 4 5 6 7
ini fimmeio
ini2 fim2meio2
ini3 fim3
Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 10 / 19
MergeSort
C´odigo
void mergeSort(int[] numeros,
int ini, int fim) {
if(ini < fim) {
int meio = (ini + fim)/2;
mergeSort(numeros, ini,
meio);
mergeSort(numeros, meio+1,
fim);
merge(numeros, ini, meio,
fim);
}
}
2 8 7 1 3 5 6 4
0 1 2 3 4 5 6 7
ini fimmeio
ini2 fim2meio2
ini3 fim3
Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 10 / 19
MergeSort
C´odigo
void mergeSort(int[] numeros,
int ini, int fim) {
if(ini < fim) {
int meio = (ini + fim)/2;
mergeSort(numeros, ini,
meio);
mergeSort(numeros, meio+1,
fim);
merge(numeros, ini, meio,
fim);
}
}
2 8 7 1 3 5 6 4
0 1 2 3 4 5 6 7
ini fimmeio
ini2 fim2meio2
ini3 fim3
meio3
Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 10 / 19
MergeSort
C´odigo
void mergeSort(int[] numeros,
int ini, int fim) {
if(ini < fim) {
int meio = (ini + fim)/2;
mergeSort(numeros, ini,
meio);
mergeSort(numeros, meio+1,
fim);
merge(numeros, ini, meio,
fim);
}
}
2 8 7 1 3 5 6 4
0 1 2 3 4 5 6 7
ini fimmeio
ini2 fim2meio2
ini3 fim3
meio3
ini4
fim4
Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 10 / 19
MergeSort
C´odigo
void mergeSort(int[] numeros,
int ini, int fim) {
if(ini < fim) {
int meio = (ini + fim)/2;
mergeSort(numeros, ini,
meio);
mergeSort(numeros, meio+1,
fim);
merge(numeros, ini, meio,
fim);
}
}
2 8 7 1 3 5 6 4
0 1 2 3 4 5 6 7
ini fimmeio
ini2 fim2meio2
ini3 fim3
meio3
ini4
fim4
Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 10 / 19
MergeSort
C´odigo
void mergeSort(int[] numeros,
int ini, int fim) {
if(ini < fim) {
int meio = (ini + fim)/2;
mergeSort(numeros, ini,
meio);
mergeSort(numeros, meio+1,
fim);
merge(numeros, ini, meio,
fim);
}
}
2 8 7 1 3 5 6 4
0 1 2 3 4 5 6 7
ini fimmeio
ini2 fim2meio2
ini3 fim3
meio3
Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 10 / 19
MergeSort
C´odigo
void mergeSort(int[] numeros,
int ini, int fim) {
if(ini < fim) {
int meio = (ini + fim)/2;
mergeSort(numeros, ini,
meio);
mergeSort(numeros, meio+1,
fim);
merge(numeros, ini, meio,
fim);
}
}
2 8 7 1 3 5 6 4
0 1 2 3 4 5 6 7
ini fimmeio
ini2 fim2meio2
ini3 fim3
meio3
ini5
fim5
Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 10 / 19
MergeSort
C´odigo
void mergeSort(int[] numeros,
int ini, int fim) {
if(ini < fim) {
int meio = (ini + fim)/2;
mergeSort(numeros, ini,
meio);
mergeSort(numeros, meio+1,
fim);
merge(numeros, ini, meio,
fim);
}
}
2 8 7 1 3 5 6 4
0 1 2 3 4 5 6 7
ini fimmeio
ini2 fim2meio2
ini3 fim3
meio3
ini5
fim5
Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 10 / 19
MergeSort
C´odigo
void mergeSort(int[] numeros,
int ini, int fim) {
if(ini < fim) {
int meio = (ini + fim)/2;
mergeSort(numeros, ini,
meio);
mergeSort(numeros, meio+1,
fim);
merge(numeros, ini, meio,
fim);
}
}
2 8 7 1 3 5 6 4
0 1 2 3 4 5 6 7
ini fimmeio
ini2 fim2meio2
ini3 fim3
meio3
Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 10 / 19
MergeSort
C´odigo
void mergeSort(int[] numeros,
int ini, int fim) {
if(ini < fim) {
int meio = (ini + fim)/2;
mergeSort(numeros, ini,
meio);
mergeSort(numeros, meio+1,
fim);
merge(numeros, ini, meio,
fim);
}
}
2 8 7 1 3 5 6 4
0 1 2 3 4 5 6 7
ini fimmeio
ini2 fim2meio2
ini3 fim3
meio3
Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 10 / 19
MergeSort
C´odigo
void mergeSort(int[] numeros,
int ini, int fim) {
if(ini < fim) {
int meio = (ini + fim)/2;
mergeSort(numeros, ini,
meio);
mergeSort(numeros, meio+1,
fim);
merge(numeros, ini, meio,
fim);
}
}
2 8 7 1 3 5 6 4
0 1 2 3 4 5 6 7
ini fimmeio
ini2 fim2meio2
Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 10 / 19
MergeSort
C´odigo
void mergeSort(int[] numeros,
int ini, int fim) {
if(ini < fim) {
int meio = (ini + fim)/2;
mergeSort(numeros, ini,
meio);
mergeSort(numeros, meio+1,
fim);
merge(numeros, ini, meio,
fim);
}
}
2 8 7 1 3 5 6 4
0 1 2 3 4 5 6 7
ini fimmeio
ini2 fim2meio2
fim6ini6
Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 10 / 19
MergeSort
C´odigo
void mergeSort(int[] numeros,
int ini, int fim) {
if(ini < fim) {
int meio = (ini + fim)/2;
mergeSort(numeros, ini,
meio);
mergeSort(numeros, meio+1,
fim);
merge(numeros, ini, meio,
fim);
}
}
2 8 7 1 3 5 6 4
0 1 2 3 4 5 6 7
ini fimmeio
ini2 fim2meio2
fim6ini6
Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 10 / 19
MergeSort
C´odigo
void mergeSort(int[] numeros,
int ini, int fim) {
if(ini < fim) {
int meio = (ini + fim)/2;
mergeSort(numeros, ini,
meio);
mergeSort(numeros, meio+1,
fim);
merge(numeros, ini, meio,
fim);
}
}
2 8 7 1 3 5 6 4
0 1 2 3 4 5 6 7
ini fimmeio
ini2 fim2meio2
fim6ini6
meio6
Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 10 / 19
MergeSort
C´odigo
void mergeSort(int[] numeros,
int ini, int fim) {
if(ini < fim) {
int meio = (ini + fim)/2;
mergeSort(numeros, ini,
meio);
mergeSort(numeros, meio+1,
fim);
merge(numeros, ini, meio,
fim);
}
}
2 8 7 1 3 5 6 4
0 1 2 3 4 5 6 7
ini fimmeio
ini2 fim2meio2
fim6ini6
meio6
ini7
fim7
Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 10 / 19
MergeSort
C´odigo
void mergeSort(int[] numeros,
int ini, int fim) {
if(ini < fim) {
int meio = (ini + fim)/2;
mergeSort(numeros, ini,
meio);
mergeSort(numeros, meio+1,
fim);
merge(numeros, ini, meio,
fim);
}
}
2 8 7 1 3 5 6 4
0 1 2 3 4 5 6 7
ini fimmeio
ini2 fim2meio2
fim6ini6
meio6
ini7
fim7
Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 10 / 19
MergeSort
C´odigo
void mergeSort(int[] numeros,
int ini, int fim) {
if(ini < fim) {
int meio = (ini + fim)/2;
mergeSort(numeros, ini,
meio);
mergeSort(numeros, meio+1,
fim);
merge(numeros, ini, meio,
fim);
}
}
2 8 7 1 3 5 6 4
0 1 2 3 4 5 6 7
ini fimmeio
ini2 fim2meio2
fim6ini6
meio6
Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 10 / 19
MergeSort
C´odigo
void mergeSort(int[] numeros,
int ini, int fim) {
if(ini < fim) {
int meio = (ini + fim)/2;
mergeSort(numeros, ini,
meio);
mergeSort(numeros, meio+1,
fim);
merge(numeros, ini, meio,
fim);
}
}
2 8 7 1 3 5 6 4
0 1 2 3 4 5 6 7
ini fimmeio
ini2 fim2meio2
fim6ini6
meio6
ini8
fim8
Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 10 / 19
MergeSort
C´odigo
void mergeSort(int[] numeros,
int ini, int fim) {
if(ini < fim) {
int meio = (ini + fim)/2;
mergeSort(numeros, ini,
meio);
mergeSort(numeros, meio+1,
fim);
merge(numeros, ini, meio,
fim);
}
}
2 8 7 1 3 5 6 4
0 1 2 3 4 5 6 7
ini fimmeio
ini2 fim2meio2
fim6ini6
meio6
ini8
fim8
Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 10 / 19
MergeSort
C´odigo
void mergeSort(int[] numeros,
int ini, int fim) {
if(ini < fim) {
int meio = (ini + fim)/2;
mergeSort(numeros, ini,
meio);
mergeSort(numeros, meio+1,
fim);
merge(numeros, ini, meio,
fim);
}
}
2 8 7 1 3 5 6 4
0 1 2 3 4 5 6 7
ini fimmeio
ini2 fim2meio2
fim6ini6
meio6
Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 10 / 19
MergeSort
C´odigo
void mergeSort(int[] numeros,
int ini, int fim) {
if(ini < fim) {
int meio = (ini + fim)/2;
mergeSort(numeros, ini,
meio);
mergeSort(numeros, meio+1,
fim);
merge(numeros, ini, meio,
fim);
}
}
2 8 1 7 3 5 6 4
0 1 2 3 4 5 6 7
ini fimmeio
ini2 fim2meio2
fim6ini6
meio6
Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 10 / 19
MergeSort
C´odigo
void mergeSort(int[] numeros,
int ini, int fim) {
if(ini < fim) {
int meio = (ini + fim)/2;
mergeSort(numeros, ini,
meio);
mergeSort(numeros, meio+1,
fim);
merge(numeros, ini, meio,
fim);
}
}
2 8 1 7 3 5 6 4
0 1 2 3 4 5 6 7
ini fimmeio
ini2 fim2meio2
Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 10 / 19
MergeSort
C´odigo
void mergeSort(int[] numeros,
int ini, int fim) {
if(ini < fim) {
int meio = (ini + fim)/2;
mergeSort(numeros, ini,
meio);
mergeSort(numeros, meio+1,
fim);
merge(numeros, ini, meio,
fim);
}
}
1 2 7 8 3 5 6 4
0 1 2 3 4 5 6 7
ini fimmeio
ini2 fim2meio2
Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 10 / 19
MergeSort
C´odigo
void mergeSort(int[] numeros,
int ini, int fim) {
if(ini < fim) {
int meio = (ini + fim)/2;
mergeSort(numeros, ini,
meio);
mergeSort(numeros, meio+1,
fim);
merge(numeros, ini, meio,
fim);
}
}
1 2 7 8 3 5 6 4
0 1 2 3 4 5 6 7
ini fimmeio
Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 10 / 19
MergeSort
C´odigo
void mergeSort(int[] numeros,
int ini, int fim) {
if(ini < fim) {
int meio = (ini + fim)/2;
mergeSort(numeros, ini,
meio);
mergeSort(numeros, meio+1,
fim);
merge(numeros, ini, meio,
fim);
}
}
1 2 7 8 3 5 6 4
0 1 2 3 4 5 6 7
ini fimmeio
fim9ini9
Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 10 / 19
MergeSort
C´odigo
void mergeSort(int[] numeros,
int ini, int fim) {
if(ini < fim) {
int meio = (ini + fim)/2;
mergeSort(numeros, ini,
meio);
mergeSort(numeros, meio+1,
fim);
merge(numeros, ini, meio,
fim);
}
}
1 2 7 8 3 5 6 4
0 1 2 3 4 5 6 7
ini fimmeio
fim9ini9
Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 10 / 19
MergeSort
C´odigo
void mergeSort(int[] numeros,
int ini, int fim) {
if(ini < fim) {
int meio = (ini + fim)/2;
mergeSort(numeros, ini,
meio);
mergeSort(numeros, meio+1,
fim);
merge(numeros, ini, meio,
fim);
}
}
1 2 7 8 3 5 6 4
0 1 2 3 4 5 6 7
ini fimmeio
fim9ini9 meio9
Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 10 / 19
MergeSort
C´odigo
void mergeSort(int[] numeros,
int ini, int fim) {
if(ini < fim) {
int meio = (ini + fim)/2;
mergeSort(numeros, ini,
meio);
mergeSort(numeros, meio+1,
fim);
merge(numeros, ini, meio,
fim);
}
}
1 2 7 8 3 5 6 4
0 1 2 3 4 5 6 7
ini fimmeio
fim9ini9 meio9
ini10 fim10
Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 10 / 19
MergeSort
C´odigo
void mergeSort(int[] numeros,
int ini, int fim) {
if(ini < fim) {
int meio = (ini + fim)/2;
mergeSort(numeros, ini,
meio);
mergeSort(numeros, meio+1,
fim);
merge(numeros, ini, meio,
fim);
}
}
1 2 7 8 3 5 6 4
0 1 2 3 4 5 6 7
ini fimmeio
fim9ini9 meio9
ini10 fim10
Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 10 / 19
MergeSort
C´odigo
void mergeSort(int[] numeros,
int ini, int fim) {
if(ini < fim) {
int meio = (ini + fim)/2;
mergeSort(numeros, ini,
meio);
mergeSort(numeros, meio+1,
fim);
merge(numeros, ini, meio,
fim);
}
}
1 2 7 8 3 5 6 4
0 1 2 3 4 5 6 7
ini fimmeio
fim9ini9 meio9
ini10 fim10
meio10
Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 10 / 19
MergeSort
C´odigo
void mergeSort(int[] numeros,
int ini, int fim) {
if(ini < fim) {
int meio = (ini + fim)/2;
mergeSort(numeros, ini,
meio);
mergeSort(numeros, meio+1,
fim);
merge(numeros, ini, meio,
fim);
}
}
1 2 7 8 3 5 6 4
0 1 2 3 4 5 6 7
ini fimmeio
fim9ini9 meio9
ini10 fim10
meio10
ini11
fim11
Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 10 / 19
MergeSort
C´odigo
void mergeSort(int[] numeros,
int ini, int fim) {
if(ini < fim) {
int meio = (ini + fim)/2;
mergeSort(numeros, ini,
meio);
mergeSort(numeros, meio+1,
fim);
merge(numeros, ini, meio,
fim);
}
}
1 2 7 8 3 5 6 4
0 1 2 3 4 5 6 7
ini fimmeio
fim9ini9 meio9
ini10 fim10
meio10
ini11
fim11
Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 10 / 19
MergeSort
C´odigo
void mergeSort(int[] numeros,
int ini, int fim) {
if(ini < fim) {
int meio = (ini + fim)/2;
mergeSort(numeros, ini,
meio);
mergeSort(numeros, meio+1,
fim);
merge(numeros, ini, meio,
fim);
}
}
1 2 7 8 3 5 6 4
0 1 2 3 4 5 6 7
ini fimmeio
fim9ini9 meio9
ini10 fim10
meio10
Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 10 / 19
MergeSort
C´odigo
void mergeSort(int[] numeros,
int ini, int fim) {
if(ini < fim) {
int meio = (ini + fim)/2;
mergeSort(numeros, ini,
meio);
mergeSort(numeros, meio+1,
fim);
merge(numeros, ini, meio,
fim);
}
}
1 2 7 8 3 5 6 4
0 1 2 3 4 5 6 7
ini fimmeio
fim9ini9 meio9
ini10 fim10
meio10
ini12
fim12
Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 10 / 19
MergeSort
C´odigo
void mergeSort(int[] numeros,
int ini, int fim) {
if(ini < fim) {
int meio = (ini + fim)/2;
mergeSort(numeros, ini,
meio);
mergeSort(numeros, meio+1,
fim);
merge(numeros, ini, meio,
fim);
}
}
1 2 7 8 3 5 6 4
0 1 2 3 4 5 6 7
ini fimmeio
fim9ini9 meio9
ini10 fim10
meio10
ini12
fim12
Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 10 / 19
MergeSort
C´odigo
void mergeSort(int[] numeros,
int ini, int fim) {
if(ini < fim) {
int meio = (ini + fim)/2;
mergeSort(numeros, ini,
meio);
mergeSort(numeros, meio+1,
fim);
merge(numeros, ini, meio,
fim);
}
}
1 2 7 8 3 5 6 4
0 1 2 3 4 5 6 7
ini fimmeio
fim9ini9 meio9
ini10 fim10
meio10
Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 10 / 19
MergeSort
C´odigo
void mergeSort(int[] numeros,
int ini, int fim) {
if(ini < fim) {
int meio = (ini + fim)/2;
mergeSort(numeros, ini,
meio);
mergeSort(numeros, meio+1,
fim);
merge(numeros, ini, meio,
fim);
}
}
1 2 7 8 3 5 6 4
0 1 2 3 4 5 6 7
ini fimmeio
fim9ini9 meio9
ini10 fim10
meio10
Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 10 / 19
MergeSort
C´odigo
void mergeSort(int[] numeros,
int ini, int fim) {
if(ini < fim) {
int meio = (ini + fim)/2;
mergeSort(numeros, ini,
meio);
mergeSort(numeros, meio+1,
fim);
merge(numeros, ini, meio,
fim);
}
}
1 2 7 8 3 5 6 4
0 1 2 3 4 5 6 7
ini fimmeio
fim9ini9 meio9
Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 10 / 19
MergeSort
C´odigo
void mergeSort(int[] numeros,
int ini, int fim) {
if(ini < fim) {
int meio = (ini + fim)/2;
mergeSort(numeros, ini,
meio);
mergeSort(numeros, meio+1,
fim);
merge(numeros, ini, meio,
fim);
}
}
1 2 7 8 3 5 6 4
0 1 2 3 4 5 6 7
ini fimmeio
fim9ini9 meio9
fim13ini13
Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 10 / 19
MergeSort
C´odigo
void mergeSort(int[] numeros,
int ini, int fim) {
if(ini < fim) {
int meio = (ini + fim)/2;
mergeSort(numeros, ini,
meio);
mergeSort(numeros, meio+1,
fim);
merge(numeros, ini, meio,
fim);
}
}
1 2 7 8 3 5 6 4
0 1 2 3 4 5 6 7
ini fimmeio
fim9ini9 meio9
fim13ini13
Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 10 / 19
MergeSort
C´odigo
void mergeSort(int[] numeros,
int ini, int fim) {
if(ini < fim) {
int meio = (ini + fim)/2;
mergeSort(numeros, ini,
meio);
mergeSort(numeros, meio+1,
fim);
merge(numeros, ini, meio,
fim);
}
}
1 2 7 8 3 5 6 4
0 1 2 3 4 5 6 7
ini fimmeio
fim9ini9 meio9
fim13ini13
meio13
Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 10 / 19
MergeSort
C´odigo
void mergeSort(int[] numeros,
int ini, int fim) {
if(ini < fim) {
int meio = (ini + fim)/2;
mergeSort(numeros, ini,
meio);
mergeSort(numeros, meio+1,
fim);
merge(numeros, ini, meio,
fim);
}
}
1 2 7 8 3 5 6 4
0 1 2 3 4 5 6 7
ini fimmeio
fim9ini9 meio9
fim13ini13
meio13
ini14
fim14
Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 10 / 19
MergeSort
C´odigo
void mergeSort(int[] numeros,
int ini, int fim) {
if(ini < fim) {
int meio = (ini + fim)/2;
mergeSort(numeros, ini,
meio);
mergeSort(numeros, meio+1,
fim);
merge(numeros, ini, meio,
fim);
}
}
1 2 7 8 3 5 6 4
0 1 2 3 4 5 6 7
ini fimmeio
fim9ini9 meio9
fim13ini13
meio13
ini14
fim14
Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 10 / 19
MergeSort
C´odigo
void mergeSort(int[] numeros,
int ini, int fim) {
if(ini < fim) {
int meio = (ini + fim)/2;
mergeSort(numeros, ini,
meio);
mergeSort(numeros, meio+1,
fim);
merge(numeros, ini, meio,
fim);
}
}
1 2 7 8 3 5 6 4
0 1 2 3 4 5 6 7
ini fimmeio
fim9ini9 meio9
fim13ini13
meio13
Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 10 / 19
MergeSort
C´odigo
void mergeSort(int[] numeros,
int ini, int fim) {
if(ini < fim) {
int meio = (ini + fim)/2;
mergeSort(numeros, ini,
meio);
mergeSort(numeros, meio+1,
fim);
merge(numeros, ini, meio,
fim);
}
}
1 2 7 8 3 5 6 4
0 1 2 3 4 5 6 7
ini fimmeio
fim9ini9 meio9
fim13ini13
meio13
ini15
fim15
Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 10 / 19
MergeSort
C´odigo
void mergeSort(int[] numeros,
int ini, int fim) {
if(ini < fim) {
int meio = (ini + fim)/2;
mergeSort(numeros, ini,
meio);
mergeSort(numeros, meio+1,
fim);
merge(numeros, ini, meio,
fim);
}
}
1 2 7 8 3 5 6 4
0 1 2 3 4 5 6 7
ini fimmeio
fim9ini9 meio9
fim13ini13
meio13
ini15
fim15
Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 10 / 19
MergeSort
C´odigo
void mergeSort(int[] numeros,
int ini, int fim) {
if(ini < fim) {
int meio = (ini + fim)/2;
mergeSort(numeros, ini,
meio);
mergeSort(numeros, meio+1,
fim);
merge(numeros, ini, meio,
fim);
}
}
1 2 7 8 3 5 6 4
0 1 2 3 4 5 6 7
ini fimmeio
fim9ini9 meio9
fim13ini13
meio13
Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 10 / 19
MergeSort
C´odigo
void mergeSort(int[] numeros,
int ini, int fim) {
if(ini < fim) {
int meio = (ini + fim)/2;
mergeSort(numeros, ini,
meio);
mergeSort(numeros, meio+1,
fim);
merge(numeros, ini, meio,
fim);
}
}
1 2 7 8 3 5 4 6
0 1 2 3 4 5 6 7
ini fimmeio
fim9ini9 meio9
fim13ini13
meio13
Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 10 / 19
MergeSort
C´odigo
void mergeSort(int[] numeros,
int ini, int fim) {
if(ini < fim) {
int meio = (ini + fim)/2;
mergeSort(numeros, ini,
meio);
mergeSort(numeros, meio+1,
fim);
merge(numeros, ini, meio,
fim);
}
}
1 2 7 8 3 5 4 6
0 1 2 3 4 5 6 7
ini fimmeio
fim9ini9 meio9
Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 10 / 19
MergeSort
C´odigo
void mergeSort(int[] numeros,
int ini, int fim) {
if(ini < fim) {
int meio = (ini + fim)/2;
mergeSort(numeros, ini,
meio);
mergeSort(numeros, meio+1,
fim);
merge(numeros, ini, meio,
fim);
}
}
1 2 7 8 3 4 5 6
0 1 2 3 4 5 6 7
ini fimmeio
fim9ini9 meio9
Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 10 / 19
MergeSort
C´odigo
void mergeSort(int[] numeros,
int ini, int fim) {
if(ini < fim) {
int meio = (ini + fim)/2;
mergeSort(numeros, ini,
meio);
mergeSort(numeros, meio+1,
fim);
merge(numeros, ini, meio,
fim);
}
}
1 2 7 8 3 4 5 6
0 1 2 3 4 5 6 7
ini fimmeio
Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 10 / 19
MergeSort
C´odigo
void mergeSort(int[] numeros,
int ini, int fim) {
if(ini < fim) {
int meio = (ini + fim)/2;
mergeSort(numeros, ini,
meio);
mergeSort(numeros, meio+1,
fim);
merge(numeros, ini, meio,
fim);
}
}
1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7
ini fimmeio
Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 10 / 19
MergeSort
Complexidade da Fus˜ao
void merge(int[] A, int p, int q, int r) {
int i, j, k;
int tamseq1 = q - p + 1;
int tamseq2 = r - q;
int [] seq1 = new int [tamseq1];
for(i=0; i < seq1.length; i++)
seq1[i] = A[p+i];
int [] seq2 = new int [tamseq2];
for(j=0; j < seq2.length; j++)
seq2[j] = A[q+1+j];
Qual a
complexidade do
merge?
Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 11 / 19
MergeSort
Complexidade da Fus˜ao
void merge(int[] A, int p, int q, int r) {
int i, j, k;
int tamseq1 = q - p + 1;
int tamseq2 = r - q;
int [] seq1 = new int [tamseq1];
for(i=0; i < seq1.length; i++)
seq1[i] = A[p+i];
int [] seq2 = new int [tamseq2];
for(j=0; j < seq2.length; j++)
seq2[j] = A[q+1+j];
Qual a
complexidade do
merge?
Θ(n)
Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 11 / 19
MergeSort
Complexidade da Fus˜ao
void merge(int[] A, int p, int q, int r) {
int i, j, k;
int tamseq1 = q - p + 1;
int tamseq2 = r - q;
int [] seq1 = new int [tamseq1];
for(i=0; i < seq1.length; i++)
seq1[i] = A[p+i];
int [] seq2 = new int [tamseq2];
for(j=0; j < seq2.length; j++)
seq2[j] = A[q+1+j];
Qual a
complexidade do
merge?
Θ(n)
+Θ(n)
Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 11 / 19
MergeSort
Complexidade da Fus˜ao
k = p; i = 0; j = 0;
while (i < seq1.length && j < seq2.length) {
if(seq2[j] <= seq1[i]) {
A[k] = seq2[j];
j++;
}
else {
A[k] = seq1[i];
i++;
}
k++;
}
Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 12 / 19
MergeSort
Complexidade da Fus˜ao
k = p; i = 0; j = 0;
while (i < seq1.length && j < seq2.length) {
if(seq2[j] <= seq1[i]) {
A[k] = seq2[j];
j++;
}
else {
A[k] = seq1[i];
i++;
}
k++;
}
+Θ(n)
Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 12 / 19
MergeSort
Complexidade da Fus˜ao
while (i < seq1.length) {
A[k] = seq1[i];
k++;
i++;
}
while (j < seq2.length) {
A[k] = seq2[j];
k++;
j++;
}
}
Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 13 / 19
MergeSort
Complexidade da Fus˜ao
while (i < seq1.length) {
A[k] = seq1[i];
k++;
i++;
}
while (j < seq2.length) {
A[k] = seq2[j];
k++;
j++;
}
}
+Θ(n)
Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 13 / 19
MergeSort
Complexidade da Fus˜ao
while (i < seq1.length) {
A[k] = seq1[i];
k++;
i++;
}
while (j < seq2.length) {
A[k] = seq2[j];
k++;
j++;
}
}
+Θ(n)
Ou seja, merge, no
total, ´e Θ(n)
Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 13 / 19
MergeSort
Complexidade do MergeSort
void mergeSort(int[] numeros, int ini, int fim) {
if(ini < fim) {
int meio = (ini + fim)/2;
mergeSort(numeros, ini, meio);
mergeSort(numeros, meio+1, fim);
merge(numeros, ini, meio, fim);
}
}
E do MergeSort?
Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 14 / 19
MergeSort
Complexidade do MergeSort
void mergeSort(int[] numeros, int ini, int fim) {
if(ini < fim) {
int meio = (ini + fim)/2;
mergeSort(numeros, ini, meio);
mergeSort(numeros, meio+1, fim);
merge(numeros, ini, meio, fim);
}
}
E do MergeSort?
T(n/2)
Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 14 / 19
MergeSort
Complexidade do MergeSort
void mergeSort(int[] numeros, int ini, int fim) {
if(ini < fim) {
int meio = (ini + fim)/2;
mergeSort(numeros, ini, meio);
mergeSort(numeros, meio+1, fim);
merge(numeros, ini, meio, fim);
}
}
E do MergeSort?
T(n/2)
+T(n/2)
Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 14 / 19
MergeSort
Complexidade do MergeSort
void mergeSort(int[] numeros, int ini, int fim) {
if(ini < fim) {
int meio = (ini + fim)/2;
mergeSort(numeros, ini, meio);
mergeSort(numeros, meio+1, fim);
merge(numeros, ini, meio, fim);
}
}
E do MergeSort?
T(n/2)
+T(n/2)
+Θ(n)
Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 14 / 19
MergeSort
Complexidade do MergeSort
void mergeSort(int[] numeros, int ini, int fim) {
if(ini < fim) {
int meio = (ini + fim)/2;
mergeSort(numeros, ini, meio);
mergeSort(numeros, meio+1, fim);
merge(numeros, ini, meio, fim);
}
}
E do MergeSort?
T(n/2)
+T(n/2)
+Θ(n)
Ent˜ao
T(n) =
O(1) se n = 1
2T(n/2) + Θ(n) para n ≥ 2
Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 14 / 19
MergeSort
Complexidade do MergeSort
Pelo Teorema Mestre,
T(n) =
O(1) se n = 1
2T(n/2) + Θ(n) para n ≥ 2
cai no caso 2, fazendo com que T(n) = Θ(n log n)
Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 15 / 19
MergeSort
Complexidade do MergeSort
´E poss´ıvel fazer a intercala¸c˜ao dos sub-arranjos
ordenados sem o uso de arranjos auxiliares?
Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 16 / 19
MergeSort
Complexidade do MergeSort
´E poss´ıvel fazer a intercala¸c˜ao dos sub-arranjos
ordenados sem o uso de arranjos auxiliares?
Sim! Basta deslocarmos os elementos de um dos
sub-arranjos, quando necess´ario, para dar lugar ao m´ınimo
dos dois sub-arranjos
Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 16 / 19
MergeSort
Complexidade do MergeSort
´E poss´ıvel fazer a intercala¸c˜ao dos sub-arranjos
ordenados sem o uso de arranjos auxiliares?
Sim! Basta deslocarmos os elementos de um dos
sub-arranjos, quando necess´ario, para dar lugar ao m´ınimo
dos dois sub-arranjos
No entanto, a etapa de intercala¸c˜ao passa a ter
complexidade Θ(n2
), resultando na recorrˆencia
T(n) =
O(1) se n = 1
2T(n/2) + Θ(n2
) para n ≥ 2
Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 16 / 19
MergeSort
Complexidade do MergeSort
T(n) =
O(1) se n = 1
2T(n/2) + Θ(n2
) para n ≥ 2
Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 17 / 19
MergeSort
Complexidade do MergeSort
T(n) =
O(1) se n = 1
2T(n/2) + Θ(n2
) para n ≥ 2
Pelo Teorema Mestre (caso 3), T(n) ∈ Θ(n2
)
Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 17 / 19
MergeSort
Complexidade do MergeSort
T(n) =
O(1) se n = 1
2T(n/2) + Θ(n2
) para n ≥ 2
Pelo Teorema Mestre (caso 3), T(n) ∈ Θ(n2
)
Ou seja, a complexidade do MergeSort passa a ser
Θ(n2
)
Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 17 / 19
MergeSort
Complexidade do MergeSort
T(n) =
O(1) se n = 1
2T(n/2) + Θ(n2
) para n ≥ 2
Pelo Teorema Mestre (caso 3), T(n) ∈ Θ(n2
)
Ou seja, a complexidade do MergeSort passa a ser
Θ(n2
)
Dessa forma, a eficiˆencia da etapa de intercala¸c˜ao ´e
crucial para a eficiˆencia do MergeSort
Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 17 / 19
MergeSort × Quicksort
Mergesort
Melhor caso:
O(n log n)
Pior caso:
O(n log n)
Caso m´edio:
O(n log n)
Ordena¸c˜ao:
Necessita de arranjos
auxiliares
Quicksort
Melhor caso:
O(n log n)
Pior caso:
O(n2
)
Caso m´edio:
O(n log n)
Ordena¸c˜ao:
Local. N˜ao necessita de
arranjos auxiliares
Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 18 / 19
Referˆencias
Cormen, Thomas H., Leiserson, Charles E., Rivest, Ronald L.,
Stein, Clifford. Introduction to Algorithms. 2a ed. MIT Press,
2001.
Material baseado em slides dos professores Delano Beder e
Marcos Chain
Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 19 / 19

Mais conteúdo relacionado

Mais procurados

(ACH2002) Introdução à Análise de Algoritmos - Aula 10
(ACH2002) Introdução à Análise de Algoritmos - Aula 10(ACH2002) Introdução à Análise de Algoritmos - Aula 10
(ACH2002) Introdução à Análise de Algoritmos - Aula 10Norton Trevisan Roman
 
(ACH2002) Introdução à Análise de Algoritmos - Aula 03
(ACH2002) Introdução à Análise de Algoritmos - Aula 03(ACH2002) Introdução à Análise de Algoritmos - Aula 03
(ACH2002) Introdução à Análise de Algoritmos - Aula 03Norton Trevisan Roman
 
(ACH2002) Introdução à Análise de Algoritmos - Aula 16
(ACH2002) Introdução à Análise de Algoritmos - Aula 16(ACH2002) Introdução à Análise de Algoritmos - Aula 16
(ACH2002) Introdução à Análise de Algoritmos - Aula 16Norton Trevisan Roman
 
(ACH2002) Introdução à Análise de Algoritmos - Aula 20
(ACH2002) Introdução à Análise de Algoritmos - Aula 20(ACH2002) Introdução à Análise de Algoritmos - Aula 20
(ACH2002) Introdução à Análise de Algoritmos - Aula 20Norton Trevisan Roman
 
Casamento de Padrões
Casamento de PadrõesCasamento de Padrões
Casamento de PadrõesRicardo Terra
 
Matemática Computacional
Matemática ComputacionalMatemática Computacional
Matemática ComputacionalRicardo Terra
 
Apostila Linguagens Formais e Autômatos (LFA)
Apostila Linguagens Formais e Autômatos (LFA)Apostila Linguagens Formais e Autômatos (LFA)
Apostila Linguagens Formais e Autômatos (LFA)Ricardo Terra
 

Mais procurados (7)

(ACH2002) Introdução à Análise de Algoritmos - Aula 10
(ACH2002) Introdução à Análise de Algoritmos - Aula 10(ACH2002) Introdução à Análise de Algoritmos - Aula 10
(ACH2002) Introdução à Análise de Algoritmos - Aula 10
 
(ACH2002) Introdução à Análise de Algoritmos - Aula 03
(ACH2002) Introdução à Análise de Algoritmos - Aula 03(ACH2002) Introdução à Análise de Algoritmos - Aula 03
(ACH2002) Introdução à Análise de Algoritmos - Aula 03
 
(ACH2002) Introdução à Análise de Algoritmos - Aula 16
(ACH2002) Introdução à Análise de Algoritmos - Aula 16(ACH2002) Introdução à Análise de Algoritmos - Aula 16
(ACH2002) Introdução à Análise de Algoritmos - Aula 16
 
(ACH2002) Introdução à Análise de Algoritmos - Aula 20
(ACH2002) Introdução à Análise de Algoritmos - Aula 20(ACH2002) Introdução à Análise de Algoritmos - Aula 20
(ACH2002) Introdução à Análise de Algoritmos - Aula 20
 
Casamento de Padrões
Casamento de PadrõesCasamento de Padrões
Casamento de Padrões
 
Matemática Computacional
Matemática ComputacionalMatemática Computacional
Matemática Computacional
 
Apostila Linguagens Formais e Autômatos (LFA)
Apostila Linguagens Formais e Autômatos (LFA)Apostila Linguagens Formais e Autômatos (LFA)
Apostila Linguagens Formais e Autômatos (LFA)
 

Mais de Norton Trevisan Roman

(ACH2044) Inteligência Artificial - Aula 24
(ACH2044) Inteligência Artificial - Aula 24(ACH2044) Inteligência Artificial - Aula 24
(ACH2044) Inteligência Artificial - Aula 24Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 23
(ACH2044) Inteligência Artificial - Aula 23(ACH2044) Inteligência Artificial - Aula 23
(ACH2044) Inteligência Artificial - Aula 23Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 22
(ACH2044) Inteligência Artificial - Aula 22(ACH2044) Inteligência Artificial - Aula 22
(ACH2044) Inteligência Artificial - Aula 22Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 21
(ACH2044) Inteligência Artificial - Aula 21(ACH2044) Inteligência Artificial - Aula 21
(ACH2044) Inteligência Artificial - Aula 21Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 20
(ACH2044) Inteligência Artificial - Aula 20(ACH2044) Inteligência Artificial - Aula 20
(ACH2044) Inteligência Artificial - Aula 20Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 19
(ACH2044) Inteligência Artificial - Aula 19(ACH2044) Inteligência Artificial - Aula 19
(ACH2044) Inteligência Artificial - Aula 19Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 18
(ACH2044) Inteligência Artificial - Aula 18(ACH2044) Inteligência Artificial - Aula 18
(ACH2044) Inteligência Artificial - Aula 18Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 17
(ACH2044) Inteligência Artificial - Aula 17(ACH2044) Inteligência Artificial - Aula 17
(ACH2044) Inteligência Artificial - Aula 17Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 16
(ACH2044) Inteligência Artificial - Aula 16(ACH2044) Inteligência Artificial - Aula 16
(ACH2044) Inteligência Artificial - Aula 16Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 15
(ACH2044) Inteligência Artificial - Aula 15(ACH2044) Inteligência Artificial - Aula 15
(ACH2044) Inteligência Artificial - Aula 15Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 14
(ACH2044) Inteligência Artificial - Aula 14(ACH2044) Inteligência Artificial - Aula 14
(ACH2044) Inteligência Artificial - Aula 14Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 13
(ACH2044) Inteligência Artificial - Aula 13(ACH2044) Inteligência Artificial - Aula 13
(ACH2044) Inteligência Artificial - Aula 13Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 12
(ACH2044) Inteligência Artificial - Aula 12(ACH2044) Inteligência Artificial - Aula 12
(ACH2044) Inteligência Artificial - Aula 12Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 11
(ACH2044) Inteligência Artificial - Aula 11(ACH2044) Inteligência Artificial - Aula 11
(ACH2044) Inteligência Artificial - Aula 11Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 10
(ACH2044) Inteligência Artificial - Aula 10(ACH2044) Inteligência Artificial - Aula 10
(ACH2044) Inteligência Artificial - Aula 10Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 09
(ACH2044) Inteligência Artificial - Aula 09(ACH2044) Inteligência Artificial - Aula 09
(ACH2044) Inteligência Artificial - Aula 09Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 08
(ACH2044) Inteligência Artificial - Aula 08(ACH2044) Inteligência Artificial - Aula 08
(ACH2044) Inteligência Artificial - Aula 08Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 07
(ACH2044) Inteligência Artificial - Aula 07(ACH2044) Inteligência Artificial - Aula 07
(ACH2044) Inteligência Artificial - Aula 07Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 06
(ACH2044) Inteligência Artificial - Aula 06(ACH2044) Inteligência Artificial - Aula 06
(ACH2044) Inteligência Artificial - Aula 06Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 05
(ACH2044) Inteligência Artificial - Aula 05(ACH2044) Inteligência Artificial - Aula 05
(ACH2044) Inteligência Artificial - Aula 05Norton Trevisan Roman
 

Mais de Norton Trevisan Roman (20)

(ACH2044) Inteligência Artificial - Aula 24
(ACH2044) Inteligência Artificial - Aula 24(ACH2044) Inteligência Artificial - Aula 24
(ACH2044) Inteligência Artificial - Aula 24
 
(ACH2044) Inteligência Artificial - Aula 23
(ACH2044) Inteligência Artificial - Aula 23(ACH2044) Inteligência Artificial - Aula 23
(ACH2044) Inteligência Artificial - Aula 23
 
(ACH2044) Inteligência Artificial - Aula 22
(ACH2044) Inteligência Artificial - Aula 22(ACH2044) Inteligência Artificial - Aula 22
(ACH2044) Inteligência Artificial - Aula 22
 
(ACH2044) Inteligência Artificial - Aula 21
(ACH2044) Inteligência Artificial - Aula 21(ACH2044) Inteligência Artificial - Aula 21
(ACH2044) Inteligência Artificial - Aula 21
 
(ACH2044) Inteligência Artificial - Aula 20
(ACH2044) Inteligência Artificial - Aula 20(ACH2044) Inteligência Artificial - Aula 20
(ACH2044) Inteligência Artificial - Aula 20
 
(ACH2044) Inteligência Artificial - Aula 19
(ACH2044) Inteligência Artificial - Aula 19(ACH2044) Inteligência Artificial - Aula 19
(ACH2044) Inteligência Artificial - Aula 19
 
(ACH2044) Inteligência Artificial - Aula 18
(ACH2044) Inteligência Artificial - Aula 18(ACH2044) Inteligência Artificial - Aula 18
(ACH2044) Inteligência Artificial - Aula 18
 
(ACH2044) Inteligência Artificial - Aula 17
(ACH2044) Inteligência Artificial - Aula 17(ACH2044) Inteligência Artificial - Aula 17
(ACH2044) Inteligência Artificial - Aula 17
 
(ACH2044) Inteligência Artificial - Aula 16
(ACH2044) Inteligência Artificial - Aula 16(ACH2044) Inteligência Artificial - Aula 16
(ACH2044) Inteligência Artificial - Aula 16
 
(ACH2044) Inteligência Artificial - Aula 15
(ACH2044) Inteligência Artificial - Aula 15(ACH2044) Inteligência Artificial - Aula 15
(ACH2044) Inteligência Artificial - Aula 15
 
(ACH2044) Inteligência Artificial - Aula 14
(ACH2044) Inteligência Artificial - Aula 14(ACH2044) Inteligência Artificial - Aula 14
(ACH2044) Inteligência Artificial - Aula 14
 
(ACH2044) Inteligência Artificial - Aula 13
(ACH2044) Inteligência Artificial - Aula 13(ACH2044) Inteligência Artificial - Aula 13
(ACH2044) Inteligência Artificial - Aula 13
 
(ACH2044) Inteligência Artificial - Aula 12
(ACH2044) Inteligência Artificial - Aula 12(ACH2044) Inteligência Artificial - Aula 12
(ACH2044) Inteligência Artificial - Aula 12
 
(ACH2044) Inteligência Artificial - Aula 11
(ACH2044) Inteligência Artificial - Aula 11(ACH2044) Inteligência Artificial - Aula 11
(ACH2044) Inteligência Artificial - Aula 11
 
(ACH2044) Inteligência Artificial - Aula 10
(ACH2044) Inteligência Artificial - Aula 10(ACH2044) Inteligência Artificial - Aula 10
(ACH2044) Inteligência Artificial - Aula 10
 
(ACH2044) Inteligência Artificial - Aula 09
(ACH2044) Inteligência Artificial - Aula 09(ACH2044) Inteligência Artificial - Aula 09
(ACH2044) Inteligência Artificial - Aula 09
 
(ACH2044) Inteligência Artificial - Aula 08
(ACH2044) Inteligência Artificial - Aula 08(ACH2044) Inteligência Artificial - Aula 08
(ACH2044) Inteligência Artificial - Aula 08
 
(ACH2044) Inteligência Artificial - Aula 07
(ACH2044) Inteligência Artificial - Aula 07(ACH2044) Inteligência Artificial - Aula 07
(ACH2044) Inteligência Artificial - Aula 07
 
(ACH2044) Inteligência Artificial - Aula 06
(ACH2044) Inteligência Artificial - Aula 06(ACH2044) Inteligência Artificial - Aula 06
(ACH2044) Inteligência Artificial - Aula 06
 
(ACH2044) Inteligência Artificial - Aula 05
(ACH2044) Inteligência Artificial - Aula 05(ACH2044) Inteligência Artificial - Aula 05
(ACH2044) Inteligência Artificial - Aula 05
 

Último

Slides Lição 6, Betel, Ordenança para uma vida de obediência e submissão.pptx
Slides Lição 6, Betel, Ordenança para uma vida de obediência e submissão.pptxSlides Lição 6, Betel, Ordenança para uma vida de obediência e submissão.pptx
Slides Lição 6, Betel, Ordenança para uma vida de obediência e submissão.pptxLuizHenriquedeAlmeid6
 
migração e trabalho 2º ano.pptx fenomenos
migração e trabalho 2º ano.pptx fenomenosmigração e trabalho 2º ano.pptx fenomenos
migração e trabalho 2º ano.pptx fenomenosLucianoPrado15
 
Revolução russa e mexicana. Slides explicativos e atividades
Revolução russa e mexicana. Slides explicativos e atividadesRevolução russa e mexicana. Slides explicativos e atividades
Revolução russa e mexicana. Slides explicativos e atividadesFabianeMartins35
 
PRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEM
PRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEMPRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEM
PRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEMHELENO FAVACHO
 
E a chuva ... (Livro pedagógico para ser usado na educação infantil e trabal...
E a chuva ...  (Livro pedagógico para ser usado na educação infantil e trabal...E a chuva ...  (Livro pedagógico para ser usado na educação infantil e trabal...
E a chuva ... (Livro pedagógico para ser usado na educação infantil e trabal...andreiavys
 
Currículo - Ícaro Kleisson - Tutor acadêmico.pdf
Currículo - Ícaro Kleisson - Tutor acadêmico.pdfCurrículo - Ícaro Kleisson - Tutor acadêmico.pdf
Currículo - Ícaro Kleisson - Tutor acadêmico.pdfTutor de matemática Ícaro
 
PROJETO DE EXTENSÃO I - Radiologia Tecnologia
PROJETO DE EXTENSÃO I - Radiologia TecnologiaPROJETO DE EXTENSÃO I - Radiologia Tecnologia
PROJETO DE EXTENSÃO I - Radiologia TecnologiaHELENO FAVACHO
 
Produção de Texto - 5º ano - CRÔNICA.pptx
Produção de Texto - 5º ano - CRÔNICA.pptxProdução de Texto - 5º ano - CRÔNICA.pptx
Produção de Texto - 5º ano - CRÔNICA.pptxLeonardoGabriel65
 
PROJETO DE EXTENÇÃO - GESTÃO DE RECURSOS HUMANOS.pdf
PROJETO DE EXTENÇÃO - GESTÃO DE RECURSOS HUMANOS.pdfPROJETO DE EXTENÇÃO - GESTÃO DE RECURSOS HUMANOS.pdf
PROJETO DE EXTENÇÃO - GESTÃO DE RECURSOS HUMANOS.pdfHELENO FAVACHO
 
19- Pedagogia (60 mapas mentais) - Amostra.pdf
19- Pedagogia (60 mapas mentais) - Amostra.pdf19- Pedagogia (60 mapas mentais) - Amostra.pdf
19- Pedagogia (60 mapas mentais) - Amostra.pdfmarlene54545
 
PROJETO DE EXTENSÃO I - SERVIÇOS JURÍDICOS, CARTORÁRIOS E NOTARIAIS.pdf
PROJETO DE EXTENSÃO I - SERVIÇOS JURÍDICOS, CARTORÁRIOS E NOTARIAIS.pdfPROJETO DE EXTENSÃO I - SERVIÇOS JURÍDICOS, CARTORÁRIOS E NOTARIAIS.pdf
PROJETO DE EXTENSÃO I - SERVIÇOS JURÍDICOS, CARTORÁRIOS E NOTARIAIS.pdfHELENO FAVACHO
 
EDUCAÇÃO ESPECIAL NA PERSPECTIVA INCLUSIVA
EDUCAÇÃO ESPECIAL NA PERSPECTIVA INCLUSIVAEDUCAÇÃO ESPECIAL NA PERSPECTIVA INCLUSIVA
EDUCAÇÃO ESPECIAL NA PERSPECTIVA INCLUSIVAssuser2ad38b
 
P P P 2024 - *CIEJA Santana / Tucuruvi*
P P P 2024  - *CIEJA Santana / Tucuruvi*P P P 2024  - *CIEJA Santana / Tucuruvi*
P P P 2024 - *CIEJA Santana / Tucuruvi*Viviane Moreiras
 
6ano variação linguística ensino fundamental.pptx
6ano variação linguística ensino fundamental.pptx6ano variação linguística ensino fundamental.pptx
6ano variação linguística ensino fundamental.pptxJssicaCassiano2
 
Cartão de crédito e fatura do cartão.pptx
Cartão de crédito e fatura do cartão.pptxCartão de crédito e fatura do cartão.pptx
Cartão de crédito e fatura do cartão.pptxMarcosLemes28
 
Aula 03 - Filogenia14+4134684516498481.pptx
Aula 03 - Filogenia14+4134684516498481.pptxAula 03 - Filogenia14+4134684516498481.pptx
Aula 03 - Filogenia14+4134684516498481.pptxandrenespoli3
 
Projeto de Extensão - ENGENHARIA DE SOFTWARE - BACHARELADO.pdf
Projeto de Extensão - ENGENHARIA DE SOFTWARE - BACHARELADO.pdfProjeto de Extensão - ENGENHARIA DE SOFTWARE - BACHARELADO.pdf
Projeto de Extensão - ENGENHARIA DE SOFTWARE - BACHARELADO.pdfHELENO FAVACHO
 
A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...
A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...
A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...PatriciaCaetano18
 
PROJETO DE EXTENSÃO I - AGRONOMIA.pdf AGRONOMIAAGRONOMIA
PROJETO DE EXTENSÃO I - AGRONOMIA.pdf AGRONOMIAAGRONOMIAPROJETO DE EXTENSÃO I - AGRONOMIA.pdf AGRONOMIAAGRONOMIA
PROJETO DE EXTENSÃO I - AGRONOMIA.pdf AGRONOMIAAGRONOMIAHELENO FAVACHO
 

Último (20)

Slides Lição 6, Betel, Ordenança para uma vida de obediência e submissão.pptx
Slides Lição 6, Betel, Ordenança para uma vida de obediência e submissão.pptxSlides Lição 6, Betel, Ordenança para uma vida de obediência e submissão.pptx
Slides Lição 6, Betel, Ordenança para uma vida de obediência e submissão.pptx
 
migração e trabalho 2º ano.pptx fenomenos
migração e trabalho 2º ano.pptx fenomenosmigração e trabalho 2º ano.pptx fenomenos
migração e trabalho 2º ano.pptx fenomenos
 
Revolução russa e mexicana. Slides explicativos e atividades
Revolução russa e mexicana. Slides explicativos e atividadesRevolução russa e mexicana. Slides explicativos e atividades
Revolução russa e mexicana. Slides explicativos e atividades
 
PRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEM
PRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEMPRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEM
PRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEM
 
E a chuva ... (Livro pedagógico para ser usado na educação infantil e trabal...
E a chuva ...  (Livro pedagógico para ser usado na educação infantil e trabal...E a chuva ...  (Livro pedagógico para ser usado na educação infantil e trabal...
E a chuva ... (Livro pedagógico para ser usado na educação infantil e trabal...
 
Currículo - Ícaro Kleisson - Tutor acadêmico.pdf
Currículo - Ícaro Kleisson - Tutor acadêmico.pdfCurrículo - Ícaro Kleisson - Tutor acadêmico.pdf
Currículo - Ícaro Kleisson - Tutor acadêmico.pdf
 
PROJETO DE EXTENSÃO I - Radiologia Tecnologia
PROJETO DE EXTENSÃO I - Radiologia TecnologiaPROJETO DE EXTENSÃO I - Radiologia Tecnologia
PROJETO DE EXTENSÃO I - Radiologia Tecnologia
 
Produção de Texto - 5º ano - CRÔNICA.pptx
Produção de Texto - 5º ano - CRÔNICA.pptxProdução de Texto - 5º ano - CRÔNICA.pptx
Produção de Texto - 5º ano - CRÔNICA.pptx
 
PROJETO DE EXTENÇÃO - GESTÃO DE RECURSOS HUMANOS.pdf
PROJETO DE EXTENÇÃO - GESTÃO DE RECURSOS HUMANOS.pdfPROJETO DE EXTENÇÃO - GESTÃO DE RECURSOS HUMANOS.pdf
PROJETO DE EXTENÇÃO - GESTÃO DE RECURSOS HUMANOS.pdf
 
19- Pedagogia (60 mapas mentais) - Amostra.pdf
19- Pedagogia (60 mapas mentais) - Amostra.pdf19- Pedagogia (60 mapas mentais) - Amostra.pdf
19- Pedagogia (60 mapas mentais) - Amostra.pdf
 
PROJETO DE EXTENSÃO I - SERVIÇOS JURÍDICOS, CARTORÁRIOS E NOTARIAIS.pdf
PROJETO DE EXTENSÃO I - SERVIÇOS JURÍDICOS, CARTORÁRIOS E NOTARIAIS.pdfPROJETO DE EXTENSÃO I - SERVIÇOS JURÍDICOS, CARTORÁRIOS E NOTARIAIS.pdf
PROJETO DE EXTENSÃO I - SERVIÇOS JURÍDICOS, CARTORÁRIOS E NOTARIAIS.pdf
 
EDUCAÇÃO ESPECIAL NA PERSPECTIVA INCLUSIVA
EDUCAÇÃO ESPECIAL NA PERSPECTIVA INCLUSIVAEDUCAÇÃO ESPECIAL NA PERSPECTIVA INCLUSIVA
EDUCAÇÃO ESPECIAL NA PERSPECTIVA INCLUSIVA
 
P P P 2024 - *CIEJA Santana / Tucuruvi*
P P P 2024  - *CIEJA Santana / Tucuruvi*P P P 2024  - *CIEJA Santana / Tucuruvi*
P P P 2024 - *CIEJA Santana / Tucuruvi*
 
Aula sobre o Imperialismo Europeu no século XIX
Aula sobre o Imperialismo Europeu no século XIXAula sobre o Imperialismo Europeu no século XIX
Aula sobre o Imperialismo Europeu no século XIX
 
6ano variação linguística ensino fundamental.pptx
6ano variação linguística ensino fundamental.pptx6ano variação linguística ensino fundamental.pptx
6ano variação linguística ensino fundamental.pptx
 
Cartão de crédito e fatura do cartão.pptx
Cartão de crédito e fatura do cartão.pptxCartão de crédito e fatura do cartão.pptx
Cartão de crédito e fatura do cartão.pptx
 
Aula 03 - Filogenia14+4134684516498481.pptx
Aula 03 - Filogenia14+4134684516498481.pptxAula 03 - Filogenia14+4134684516498481.pptx
Aula 03 - Filogenia14+4134684516498481.pptx
 
Projeto de Extensão - ENGENHARIA DE SOFTWARE - BACHARELADO.pdf
Projeto de Extensão - ENGENHARIA DE SOFTWARE - BACHARELADO.pdfProjeto de Extensão - ENGENHARIA DE SOFTWARE - BACHARELADO.pdf
Projeto de Extensão - ENGENHARIA DE SOFTWARE - BACHARELADO.pdf
 
A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...
A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...
A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...
 
PROJETO DE EXTENSÃO I - AGRONOMIA.pdf AGRONOMIAAGRONOMIA
PROJETO DE EXTENSÃO I - AGRONOMIA.pdf AGRONOMIAAGRONOMIAPROJETO DE EXTENSÃO I - AGRONOMIA.pdf AGRONOMIAAGRONOMIA
PROJETO DE EXTENSÃO I - AGRONOMIA.pdf AGRONOMIAAGRONOMIA
 

(ACH2002) Introdução à Análise de Algoritmos - Aula 15

  • 1. Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort) Norton Trevisan Roman norton@usp.br 9 de outubro de 2018 Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 1 / 19
  • 2. Projeto por Indu¸c˜ao Forte Segunda Alternativa Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 2 / 19
  • 3. Projeto por Indu¸c˜ao Forte Segunda Alternativa Base: n = 1. Um conjunto de um ´unico elemento est´a ordenado Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 2 / 19
  • 4. Projeto por Indu¸c˜ao Forte Segunda Alternativa Base: n = 1. Um conjunto de um ´unico elemento est´a ordenado H.I.: Sei ordenar um conjunto de 1 ≤ k < n valores Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 2 / 19
  • 5. Projeto por Indu¸c˜ao Forte Segunda Alternativa Base: n = 1. Um conjunto de um ´unico elemento est´a ordenado H.I.: Sei ordenar um conjunto de 1 ≤ k < n valores Passo: Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 2 / 19
  • 6. Projeto por Indu¸c˜ao Forte Segunda Alternativa Base: n = 1. Um conjunto de um ´unico elemento est´a ordenado H.I.: Sei ordenar um conjunto de 1 ≤ k < n valores Passo: Seja S um conjunto de n ≥ 2 valores. Podemos particionar S em dois conjuntos, S1 e S2 , de tamanhos n/2 Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 2 / 19
  • 7. Projeto por Indu¸c˜ao Forte Segunda Alternativa Base: n = 1. Um conjunto de um ´unico elemento est´a ordenado H.I.: Sei ordenar um conjunto de 1 ≤ k < n valores Passo: Seja S um conjunto de n ≥ 2 valores. Podemos particionar S em dois conjuntos, S1 e S2 , de tamanhos n/2 Pela H.I., sabemos ordenar os conjuntos S1 e S2. Podemos ent˜ao obter S ordenado intercalando os conjuntos ordenados S1 e S2 Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 2 / 19
  • 8. Projeto por Indu¸c˜ao Forte Segunda Alternativa Base: n = 1. Um conjunto de um ´unico elemento est´a ordenado H.I.: Sei ordenar um conjunto de 1 ≤ k < n valores Passo: Seja S um conjunto de n ≥ 2 valores. Podemos particionar S em dois conjuntos, S1 e S2 , de tamanhos n/2 Pela H.I., sabemos ordenar os conjuntos S1 e S2. Podemos ent˜ao obter S ordenado intercalando os conjuntos ordenados S1 e S2 MergeSort Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 2 / 19
  • 9. MergeSort Passos para ordenar um arranjo A Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 3 / 19
  • 10. MergeSort Passos para ordenar um arranjo A Dividir: Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 3 / 19
  • 11. MergeSort Passos para ordenar um arranjo A Dividir: Divida o arranjo de n elementos em dois sub-arranjos de n/2 elementos cada Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 3 / 19
  • 12. MergeSort Passos para ordenar um arranjo A Dividir: Divida o arranjo de n elementos em dois sub-arranjos de n/2 elementos cada Conquistar: Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 3 / 19
  • 13. MergeSort Passos para ordenar um arranjo A Dividir: Divida o arranjo de n elementos em dois sub-arranjos de n/2 elementos cada Conquistar: Ordene os dois sub-arranjos recursivamente Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 3 / 19
  • 14. MergeSort Passos para ordenar um arranjo A Dividir: Divida o arranjo de n elementos em dois sub-arranjos de n/2 elementos cada Conquistar: Ordene os dois sub-arranjos recursivamente Combinar: Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 3 / 19
  • 15. MergeSort Passos para ordenar um arranjo A Dividir: Divida o arranjo de n elementos em dois sub-arranjos de n/2 elementos cada Conquistar: Ordene os dois sub-arranjos recursivamente Combinar: Intercale os dois sub-arranjos ordenados, de modo a produzir a resposta ordenada Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 3 / 19
  • 16. MergeSort Passos para ordenar um arranjo A Podemos ver que a divis˜ao ´e imediata Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 4 / 19
  • 17. MergeSort Passos para ordenar um arranjo A Podemos ver que a divis˜ao ´e imediata O arranjo ´e dividido em dois sub-arranjos com metade do tamanho do original, que s˜ao ordenados recursivamente Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 4 / 19
  • 18. MergeSort Passos para ordenar um arranjo A Podemos ver que a divis˜ao ´e imediata O arranjo ´e dividido em dois sub-arranjos com metade do tamanho do original, que s˜ao ordenados recursivamente A conquista tamb´em n˜ao ´e dif´ıcil Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 4 / 19
  • 19. MergeSort Passos para ordenar um arranjo A Podemos ver que a divis˜ao ´e imediata O arranjo ´e dividido em dois sub-arranjos com metade do tamanho do original, que s˜ao ordenados recursivamente A conquista tamb´em n˜ao ´e dif´ıcil Inevitavelmente vamos parar no caso base, que ´e trivial Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 4 / 19
  • 20. MergeSort Passos para ordenar um arranjo A Podemos ver que a divis˜ao ´e imediata O arranjo ´e dividido em dois sub-arranjos com metade do tamanho do original, que s˜ao ordenados recursivamente A conquista tamb´em n˜ao ´e dif´ıcil Inevitavelmente vamos parar no caso base, que ´e trivial E a combina¸c˜ao? Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 4 / 19
  • 21. MergeSort Passos para ordenar um arranjo A Podemos ver que a divis˜ao ´e imediata O arranjo ´e dividido em dois sub-arranjos com metade do tamanho do original, que s˜ao ordenados recursivamente A conquista tamb´em n˜ao ´e dif´ıcil Inevitavelmente vamos parar no caso base, que ´e trivial E a combina¸c˜ao? Como intercalar os 2 sub-arranjos ordenados? Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 4 / 19
  • 22. MergeSort Intercala¸c˜ao void merge(int[] A, int p, int q, int r) { int i, j, k; int tamseq1 = q - p + 1; int tamseq2 = r - q; int [] seq1 = new int [tamseq1]; for(i=0; i < seq1.length; i++) seq1[i] = A[p+i]; int [] seq2 = new int [tamseq2]; for(j=0; j < seq2.length; j++) seq2[j] = A[q+1+j]; ... Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 5 / 19
  • 23. MergeSort Intercala¸c˜ao Arranjo a ser ordenado void merge(int[] A, int p, int q, int r) { int i, j, k; int tamseq1 = q - p + 1; int tamseq2 = r - q; int [] seq1 = new int [tamseq1]; for(i=0; i < seq1.length; i++) seq1[i] = A[p+i]; int [] seq2 = new int [tamseq2]; for(j=0; j < seq2.length; j++) seq2[j] = A[q+1+j]; ... Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 5 / 19
  • 24. MergeSort Intercala¸c˜ao ´ındices no arranjo, sendo p ≤ q < r void merge(int[] A, int p, int q, int r) { int i, j, k; int tamseq1 = q - p + 1; int tamseq2 = r - q; int [] seq1 = new int [tamseq1]; for(i=0; i < seq1.length; i++) seq1[i] = A[p+i]; int [] seq2 = new int [tamseq2]; for(j=0; j < seq2.length; j++) seq2[j] = A[q+1+j]; ... Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 5 / 19
  • 25. MergeSort Intercala¸c˜ao O procedimento assume que os sub- arranjos A[p..q] e A[q+1..r] j´a est˜ao ordenados void merge(int[] A, int p, int q, int r) { int i, j, k; int tamseq1 = q - p + 1; int tamseq2 = r - q; int [] seq1 = new int [tamseq1]; for(i=0; i < seq1.length; i++) seq1[i] = A[p+i]; int [] seq2 = new int [tamseq2]; for(j=0; j < seq2.length; j++) seq2[j] = A[q+1+j]; ... Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 5 / 19
  • 26. MergeSort Intercala¸c˜ao Os sub-arranjos ser˜ao ent˜ao intercalados para formar um ´unico sub-arranjo ordenado, substituindo o sub- arranjo A[p..r] atual void merge(int[] A, int p, int q, int r) { int i, j, k; int tamseq1 = q - p + 1; int tamseq2 = r - q; int [] seq1 = new int [tamseq1]; for(i=0; i < seq1.length; i++) seq1[i] = A[p+i]; int [] seq2 = new int [tamseq2]; for(j=0; j < seq2.length; j++) seq2[j] = A[q+1+j]; ... Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 5 / 19
  • 27. MergeSort Intercala¸c˜ao Tamanho da sub-sequˆencia 1 void merge(int[] A, int p, int q, int r) { int i, j, k; int tamseq1 = q - p + 1; int tamseq2 = r - q; int [] seq1 = new int [tamseq1]; for(i=0; i < seq1.length; i++) seq1[i] = A[p+i]; int [] seq2 = new int [tamseq2]; for(j=0; j < seq2.length; j++) seq2[j] = A[q+1+j]; ... Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 5 / 19
  • 28. MergeSort Intercala¸c˜ao Tamanho da sub-sequˆencia 2 void merge(int[] A, int p, int q, int r) { int i, j, k; int tamseq1 = q - p + 1; int tamseq2 = r - q; int [] seq1 = new int [tamseq1]; for(i=0; i < seq1.length; i++) seq1[i] = A[p+i]; int [] seq2 = new int [tamseq2]; for(j=0; j < seq2.length; j++) seq2[j] = A[q+1+j]; ... Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 5 / 19
  • 29. MergeSort Intercala¸c˜ao Copia A[p..q] em seq1 void merge(int[] A, int p, int q, int r) { int i, j, k; int tamseq1 = q - p + 1; int tamseq2 = r - q; int [] seq1 = new int [tamseq1]; for(i=0; i < seq1.length; i++) seq1[i] = A[p+i]; int [] seq2 = new int [tamseq2]; for(j=0; j < seq2.length; j++) seq2[j] = A[q+1+j]; ... Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 5 / 19
  • 30. MergeSort Intercala¸c˜ao E A[q+1..r] em seq2 void merge(int[] A, int p, int q, int r) { int i, j, k; int tamseq1 = q - p + 1; int tamseq2 = r - q; int [] seq1 = new int [tamseq1]; for(i=0; i < seq1.length; i++) seq1[i] = A[p+i]; int [] seq2 = new int [tamseq2]; for(j=0; j < seq2.length; j++) seq2[j] = A[q+1+j]; ... Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 5 / 19
  • 31. MergeSort Intercala¸c˜ao (cont.) Juntamos agora as subsequˆencias ... k = p; i = 0; j = 0; while (i < seq1.length && j < seq2.length) { if(seq2[j] <= seq1[i]) { A[k] = seq2[j]; j++; } else { A[k] = seq1[i]; i++; } k++; } ... Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 6 / 19
  • 32. MergeSort Intercala¸c˜ao (cont.) O la¸co vai at´e terminar a menor subsequˆencia ... k = p; i = 0; j = 0; while (i < seq1.length && j < seq2.length) { if(seq2[j] <= seq1[i]) { A[k] = seq2[j]; j++; } else { A[k] = seq1[i]; i++; } k++; } ... Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 6 / 19
  • 33. MergeSort Intercala¸c˜ao (cont.) A[p...] recebe o menor elemento dentre as 2 subsequˆencias ... k = p; i = 0; j = 0; while (i < seq1.length && j < seq2.length) { if(seq2[j] <= seq1[i]) { A[k] = seq2[j]; j++; } else { A[k] = seq1[i]; i++; } k++; } ... Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 6 / 19
  • 34. MergeSort Intercala¸c˜ao (cont.) Completa com a subsequˆencia que ainda n˜ao acabou ... while (i < seq1.length) { A[k] = seq1[i]; k++; i++; } while (j < seq2.length) { A[k] = seq2[j]; k++; j++; } } Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 7 / 19
  • 35. MergeSort Intercala¸c˜ao (cont.) Ou a primeira... ... while (i < seq1.length) { A[k] = seq1[i]; k++; i++; } while (j < seq2.length) { A[k] = seq2[j]; k++; j++; } } Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 7 / 19
  • 36. MergeSort Intercala¸c˜ao (cont.) Ou a segunda ... while (i < seq1.length) { A[k] = seq1[i]; k++; i++; } while (j < seq2.length) { A[k] = seq2[j]; k++; j++; } } Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 7 / 19
  • 37. MergeSort Intercala¸c˜ao (cont.) No final, a sub- sequˆencia A[p..r] est´a ordenada ... while (i < seq1.length) { A[k] = seq1[i]; k++; i++; } while (j < seq2.length) { A[k] = seq2[j]; k++; j++; } } Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 7 / 19
  • 38. MergeSort Intercala¸c˜ao: Exemplo Considere o arranjo A e os ´ındices p, q e r: 3 12 1 8 4 6 10 5 7 12 15 5 2 1 8A 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 p q r Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 8 / 19
  • 39. MergeSort Intercala¸c˜ao: Exemplo Considere o arranjo A e os ´ındices p, q e r: 3 12 1 8 4 6 10 5 7 12 15 5 2 1 8A 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 p q r Note que A[p..q] e A[q+1..r] est˜ao ordenados Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 8 / 19
  • 40. MergeSort Intercala¸c˜ao: Exemplo Considere o arranjo A e os ´ındices p, q e r: 3 12 1 8 4 6 10 5 7 12 15 5 2 1 8A 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 p q r 4 6 10seq1 5 7 12 15seq2 Copiamos A[p..q] em seq1 e A[q+1..r] em seq2 Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 8 / 19
  • 41. MergeSort Intercala¸c˜ao: Exemplo Considere o arranjo A e os ´ındices p, q e r: 3 12 1 8 4 6 10 5 7 12 15 5 2 1 8A 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 p q r 4 6 10seq1 5 7 12 15seq2 A[k] recebe o menor elemento dentre os 2 sub-arranjos Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 8 / 19
  • 42. MergeSort Intercala¸c˜ao: Exemplo Considere o arranjo A e os ´ındices p, q e r: 3 12 1 8 4 6 10 5 7 12 15 5 2 1 8A 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 p q r 4 6 10seq1 5 7 12 15seq2 A[k] recebe o menor elemento dentre os 2 sub-arranjos Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 8 / 19
  • 43. MergeSort Intercala¸c˜ao: Exemplo Considere o arranjo A e os ´ındices p, q e r: 3 12 1 8 4 6 10 5 7 12 15 5 2 1 8A 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 p q r 4 6 10seq1 5 7 12 15seq2 A[k] recebe o menor elemento dentre os 2 sub-arranjos Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 8 / 19
  • 44. MergeSort Intercala¸c˜ao: Exemplo Considere o arranjo A e os ´ındices p, q e r: 3 12 1 8 4 6 10 5 7 12 15 5 2 1 8A 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 p q r 4 6 10seq1 5 7 12 15seq2 A[k] recebe o menor elemento dentre os 2 sub-arranjos Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 8 / 19
  • 45. MergeSort Intercala¸c˜ao: Exemplo Considere o arranjo A e os ´ındices p, q e r: 3 12 1 8 4 5 10 5 7 12 15 5 2 1 8A 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 p q r 4 6 10seq1 5 7 12 15seq2 A[k] recebe o menor elemento dentre os 2 sub-arranjos Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 8 / 19
  • 46. MergeSort Intercala¸c˜ao: Exemplo Considere o arranjo A e os ´ındices p, q e r: 3 12 1 8 4 5 10 5 7 12 15 5 2 1 8A 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 p q r 4 6 10seq1 5 7 12 15seq2 A[k] recebe o menor elemento dentre os 2 sub-arranjos Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 8 / 19
  • 47. MergeSort Intercala¸c˜ao: Exemplo Considere o arranjo A e os ´ındices p, q e r: 3 12 1 8 4 5 6 5 7 12 15 5 2 1 8A 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 p q r 4 6 10seq1 5 7 12 15seq2 A[k] recebe o menor elemento dentre os 2 sub-arranjos Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 8 / 19
  • 48. MergeSort Intercala¸c˜ao: Exemplo Considere o arranjo A e os ´ındices p, q e r: 3 12 1 8 4 5 6 5 7 12 15 5 2 1 8A 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 p q r 4 6 10seq1 5 7 12 15seq2 A[k] recebe o menor elemento dentre os 2 sub-arranjos Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 8 / 19
  • 49. MergeSort Intercala¸c˜ao: Exemplo Considere o arranjo A e os ´ındices p, q e r: 3 12 1 8 4 5 6 7 7 12 15 5 2 1 8A 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 p q r 4 6 10seq1 5 7 12 15seq2 A[k] recebe o menor elemento dentre os 2 sub-arranjos Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 8 / 19
  • 50. MergeSort Intercala¸c˜ao: Exemplo Considere o arranjo A e os ´ındices p, q e r: 3 12 1 8 4 5 6 7 7 12 15 5 2 1 8A 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 p q r 4 6 10seq1 5 7 12 15seq2 A[k] recebe o menor elemento dentre os 2 sub-arranjos Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 8 / 19
  • 51. MergeSort Intercala¸c˜ao: Exemplo Considere o arranjo A e os ´ındices p, q e r: 3 12 1 8 4 5 6 7 10 12 15 5 2 1 8A 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 p q r 4 6 10seq1 5 7 12 15seq2 A[k] recebe o menor elemento dentre os 2 sub-arranjos Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 8 / 19
  • 52. MergeSort Intercala¸c˜ao: Exemplo Considere o arranjo A e os ´ındices p, q e r: 3 12 1 8 4 5 6 7 10 12 15 5 2 1 8A 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 p q r 4 6 10seq1 5 7 12 15seq2 A[k] recebe o menor elemento dentre os 2 sub-arranjos Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 8 / 19
  • 53. MergeSort Intercala¸c˜ao: Exemplo Considere o arranjo A e os ´ındices p, q e r: 3 12 1 8 4 5 6 7 10 12 15 5 2 1 8A 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 p q r 4 6 10seq1 5 7 12 15seq2 A[k] recebe o menor elemento dentre os 2 sub-arranjos Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 8 / 19
  • 54. MergeSort Intercala¸c˜ao: Exemplo Considere o arranjo A e os ´ındices p, q e r: 3 12 1 8 4 5 6 7 10 12 15 5 2 1 8A 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 p q r 4 6 10seq1 5 7 12 15seq2 A[k] recebe o menor elemento dentre os 2 sub-arranjos Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 8 / 19
  • 55. MergeSort Intercala¸c˜ao: Exemplo Considere o arranjo A e os ´ındices p, q e r: 3 12 1 8 4 5 6 7 10 12 15 5 2 1 8A 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 p q r 4 6 10seq1 5 7 12 15seq2 A[k] recebe o menor elemento dentre os 2 sub-arranjos Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 8 / 19
  • 56. MergeSort Intercala¸c˜ao: Exemplo Considere o arranjo A e os ´ındices p, q e r: 3 12 1 8 4 5 6 7 10 12 15 5 2 1 8A 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 p q r 4 6 10seq1 5 7 12 15seq2 E A[p..r] est´a ordenado Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 8 / 19
  • 57. MergeSort Vejamos agora o MergeSort completo void mergeSort(int[] numeros, int ini, int fim) { if(ini < fim) { int meio = (ini + fim)/2; mergeSort(numeros, ini, meio); mergeSort(numeros, meio+1, fim); merge(numeros, ini, meio, fim); } } Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 9 / 19
  • 58. MergeSort Vejamos agora o MergeSort completo Dividir void mergeSort(int[] numeros, int ini, int fim) { if(ini < fim) { int meio = (ini + fim)/2; mergeSort(numeros, ini, meio); mergeSort(numeros, meio+1, fim); merge(numeros, ini, meio, fim); } } Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 9 / 19
  • 59. MergeSort Vejamos agora o MergeSort completo Conquistar void mergeSort(int[] numeros, int ini, int fim) { if(ini < fim) { int meio = (ini + fim)/2; mergeSort(numeros, ini, meio); mergeSort(numeros, meio+1, fim); merge(numeros, ini, meio, fim); } } Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 9 / 19
  • 60. MergeSort Vejamos agora o MergeSort completo Combinar void mergeSort(int[] numeros, int ini, int fim) { if(ini < fim) { int meio = (ini + fim)/2; mergeSort(numeros, ini, meio); mergeSort(numeros, meio+1, fim); merge(numeros, ini, meio, fim); } } Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 9 / 19
  • 61. MergeSort C´odigo void mergeSort(int[] numeros, int ini, int fim) { if(ini < fim) { int meio = (ini + fim)/2; mergeSort(numeros, ini, meio); mergeSort(numeros, meio+1, fim); merge(numeros, ini, meio, fim); } } Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 10 / 19
  • 62. MergeSort C´odigo void mergeSort(int[] numeros, int ini, int fim) { if(ini < fim) { int meio = (ini + fim)/2; mergeSort(numeros, ini, meio); mergeSort(numeros, meio+1, fim); merge(numeros, ini, meio, fim); } } 2 8 7 1 3 5 6 4 0 1 2 3 4 5 6 7 ini fim Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 10 / 19
  • 63. MergeSort C´odigo void mergeSort(int[] numeros, int ini, int fim) { if(ini < fim) { int meio = (ini + fim)/2; mergeSort(numeros, ini, meio); mergeSort(numeros, meio+1, fim); merge(numeros, ini, meio, fim); } } 2 8 7 1 3 5 6 4 0 1 2 3 4 5 6 7 ini fim Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 10 / 19
  • 64. MergeSort C´odigo void mergeSort(int[] numeros, int ini, int fim) { if(ini < fim) { int meio = (ini + fim)/2; mergeSort(numeros, ini, meio); mergeSort(numeros, meio+1, fim); merge(numeros, ini, meio, fim); } } 2 8 7 1 3 5 6 4 0 1 2 3 4 5 6 7 ini fimmeio Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 10 / 19
  • 65. MergeSort C´odigo void mergeSort(int[] numeros, int ini, int fim) { if(ini < fim) { int meio = (ini + fim)/2; mergeSort(numeros, ini, meio); mergeSort(numeros, meio+1, fim); merge(numeros, ini, meio, fim); } } 2 8 7 1 3 5 6 4 0 1 2 3 4 5 6 7 ini fimmeio ini2 fim2 Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 10 / 19
  • 66. MergeSort C´odigo void mergeSort(int[] numeros, int ini, int fim) { if(ini < fim) { int meio = (ini + fim)/2; mergeSort(numeros, ini, meio); mergeSort(numeros, meio+1, fim); merge(numeros, ini, meio, fim); } } 2 8 7 1 3 5 6 4 0 1 2 3 4 5 6 7 ini fimmeio ini2 fim2 Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 10 / 19
  • 67. MergeSort C´odigo void mergeSort(int[] numeros, int ini, int fim) { if(ini < fim) { int meio = (ini + fim)/2; mergeSort(numeros, ini, meio); mergeSort(numeros, meio+1, fim); merge(numeros, ini, meio, fim); } } 2 8 7 1 3 5 6 4 0 1 2 3 4 5 6 7 ini fimmeio ini2 fim2meio2 Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 10 / 19
  • 68. MergeSort C´odigo void mergeSort(int[] numeros, int ini, int fim) { if(ini < fim) { int meio = (ini + fim)/2; mergeSort(numeros, ini, meio); mergeSort(numeros, meio+1, fim); merge(numeros, ini, meio, fim); } } 2 8 7 1 3 5 6 4 0 1 2 3 4 5 6 7 ini fimmeio ini2 fim2meio2 ini3 fim3 Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 10 / 19
  • 69. MergeSort C´odigo void mergeSort(int[] numeros, int ini, int fim) { if(ini < fim) { int meio = (ini + fim)/2; mergeSort(numeros, ini, meio); mergeSort(numeros, meio+1, fim); merge(numeros, ini, meio, fim); } } 2 8 7 1 3 5 6 4 0 1 2 3 4 5 6 7 ini fimmeio ini2 fim2meio2 ini3 fim3 Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 10 / 19
  • 70. MergeSort C´odigo void mergeSort(int[] numeros, int ini, int fim) { if(ini < fim) { int meio = (ini + fim)/2; mergeSort(numeros, ini, meio); mergeSort(numeros, meio+1, fim); merge(numeros, ini, meio, fim); } } 2 8 7 1 3 5 6 4 0 1 2 3 4 5 6 7 ini fimmeio ini2 fim2meio2 ini3 fim3 meio3 Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 10 / 19
  • 71. MergeSort C´odigo void mergeSort(int[] numeros, int ini, int fim) { if(ini < fim) { int meio = (ini + fim)/2; mergeSort(numeros, ini, meio); mergeSort(numeros, meio+1, fim); merge(numeros, ini, meio, fim); } } 2 8 7 1 3 5 6 4 0 1 2 3 4 5 6 7 ini fimmeio ini2 fim2meio2 ini3 fim3 meio3 ini4 fim4 Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 10 / 19
  • 72. MergeSort C´odigo void mergeSort(int[] numeros, int ini, int fim) { if(ini < fim) { int meio = (ini + fim)/2; mergeSort(numeros, ini, meio); mergeSort(numeros, meio+1, fim); merge(numeros, ini, meio, fim); } } 2 8 7 1 3 5 6 4 0 1 2 3 4 5 6 7 ini fimmeio ini2 fim2meio2 ini3 fim3 meio3 ini4 fim4 Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 10 / 19
  • 73. MergeSort C´odigo void mergeSort(int[] numeros, int ini, int fim) { if(ini < fim) { int meio = (ini + fim)/2; mergeSort(numeros, ini, meio); mergeSort(numeros, meio+1, fim); merge(numeros, ini, meio, fim); } } 2 8 7 1 3 5 6 4 0 1 2 3 4 5 6 7 ini fimmeio ini2 fim2meio2 ini3 fim3 meio3 Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 10 / 19
  • 74. MergeSort C´odigo void mergeSort(int[] numeros, int ini, int fim) { if(ini < fim) { int meio = (ini + fim)/2; mergeSort(numeros, ini, meio); mergeSort(numeros, meio+1, fim); merge(numeros, ini, meio, fim); } } 2 8 7 1 3 5 6 4 0 1 2 3 4 5 6 7 ini fimmeio ini2 fim2meio2 ini3 fim3 meio3 ini5 fim5 Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 10 / 19
  • 75. MergeSort C´odigo void mergeSort(int[] numeros, int ini, int fim) { if(ini < fim) { int meio = (ini + fim)/2; mergeSort(numeros, ini, meio); mergeSort(numeros, meio+1, fim); merge(numeros, ini, meio, fim); } } 2 8 7 1 3 5 6 4 0 1 2 3 4 5 6 7 ini fimmeio ini2 fim2meio2 ini3 fim3 meio3 ini5 fim5 Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 10 / 19
  • 76. MergeSort C´odigo void mergeSort(int[] numeros, int ini, int fim) { if(ini < fim) { int meio = (ini + fim)/2; mergeSort(numeros, ini, meio); mergeSort(numeros, meio+1, fim); merge(numeros, ini, meio, fim); } } 2 8 7 1 3 5 6 4 0 1 2 3 4 5 6 7 ini fimmeio ini2 fim2meio2 ini3 fim3 meio3 Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 10 / 19
  • 77. MergeSort C´odigo void mergeSort(int[] numeros, int ini, int fim) { if(ini < fim) { int meio = (ini + fim)/2; mergeSort(numeros, ini, meio); mergeSort(numeros, meio+1, fim); merge(numeros, ini, meio, fim); } } 2 8 7 1 3 5 6 4 0 1 2 3 4 5 6 7 ini fimmeio ini2 fim2meio2 ini3 fim3 meio3 Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 10 / 19
  • 78. MergeSort C´odigo void mergeSort(int[] numeros, int ini, int fim) { if(ini < fim) { int meio = (ini + fim)/2; mergeSort(numeros, ini, meio); mergeSort(numeros, meio+1, fim); merge(numeros, ini, meio, fim); } } 2 8 7 1 3 5 6 4 0 1 2 3 4 5 6 7 ini fimmeio ini2 fim2meio2 Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 10 / 19
  • 79. MergeSort C´odigo void mergeSort(int[] numeros, int ini, int fim) { if(ini < fim) { int meio = (ini + fim)/2; mergeSort(numeros, ini, meio); mergeSort(numeros, meio+1, fim); merge(numeros, ini, meio, fim); } } 2 8 7 1 3 5 6 4 0 1 2 3 4 5 6 7 ini fimmeio ini2 fim2meio2 fim6ini6 Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 10 / 19
  • 80. MergeSort C´odigo void mergeSort(int[] numeros, int ini, int fim) { if(ini < fim) { int meio = (ini + fim)/2; mergeSort(numeros, ini, meio); mergeSort(numeros, meio+1, fim); merge(numeros, ini, meio, fim); } } 2 8 7 1 3 5 6 4 0 1 2 3 4 5 6 7 ini fimmeio ini2 fim2meio2 fim6ini6 Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 10 / 19
  • 81. MergeSort C´odigo void mergeSort(int[] numeros, int ini, int fim) { if(ini < fim) { int meio = (ini + fim)/2; mergeSort(numeros, ini, meio); mergeSort(numeros, meio+1, fim); merge(numeros, ini, meio, fim); } } 2 8 7 1 3 5 6 4 0 1 2 3 4 5 6 7 ini fimmeio ini2 fim2meio2 fim6ini6 meio6 Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 10 / 19
  • 82. MergeSort C´odigo void mergeSort(int[] numeros, int ini, int fim) { if(ini < fim) { int meio = (ini + fim)/2; mergeSort(numeros, ini, meio); mergeSort(numeros, meio+1, fim); merge(numeros, ini, meio, fim); } } 2 8 7 1 3 5 6 4 0 1 2 3 4 5 6 7 ini fimmeio ini2 fim2meio2 fim6ini6 meio6 ini7 fim7 Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 10 / 19
  • 83. MergeSort C´odigo void mergeSort(int[] numeros, int ini, int fim) { if(ini < fim) { int meio = (ini + fim)/2; mergeSort(numeros, ini, meio); mergeSort(numeros, meio+1, fim); merge(numeros, ini, meio, fim); } } 2 8 7 1 3 5 6 4 0 1 2 3 4 5 6 7 ini fimmeio ini2 fim2meio2 fim6ini6 meio6 ini7 fim7 Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 10 / 19
  • 84. MergeSort C´odigo void mergeSort(int[] numeros, int ini, int fim) { if(ini < fim) { int meio = (ini + fim)/2; mergeSort(numeros, ini, meio); mergeSort(numeros, meio+1, fim); merge(numeros, ini, meio, fim); } } 2 8 7 1 3 5 6 4 0 1 2 3 4 5 6 7 ini fimmeio ini2 fim2meio2 fim6ini6 meio6 Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 10 / 19
  • 85. MergeSort C´odigo void mergeSort(int[] numeros, int ini, int fim) { if(ini < fim) { int meio = (ini + fim)/2; mergeSort(numeros, ini, meio); mergeSort(numeros, meio+1, fim); merge(numeros, ini, meio, fim); } } 2 8 7 1 3 5 6 4 0 1 2 3 4 5 6 7 ini fimmeio ini2 fim2meio2 fim6ini6 meio6 ini8 fim8 Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 10 / 19
  • 86. MergeSort C´odigo void mergeSort(int[] numeros, int ini, int fim) { if(ini < fim) { int meio = (ini + fim)/2; mergeSort(numeros, ini, meio); mergeSort(numeros, meio+1, fim); merge(numeros, ini, meio, fim); } } 2 8 7 1 3 5 6 4 0 1 2 3 4 5 6 7 ini fimmeio ini2 fim2meio2 fim6ini6 meio6 ini8 fim8 Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 10 / 19
  • 87. MergeSort C´odigo void mergeSort(int[] numeros, int ini, int fim) { if(ini < fim) { int meio = (ini + fim)/2; mergeSort(numeros, ini, meio); mergeSort(numeros, meio+1, fim); merge(numeros, ini, meio, fim); } } 2 8 7 1 3 5 6 4 0 1 2 3 4 5 6 7 ini fimmeio ini2 fim2meio2 fim6ini6 meio6 Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 10 / 19
  • 88. MergeSort C´odigo void mergeSort(int[] numeros, int ini, int fim) { if(ini < fim) { int meio = (ini + fim)/2; mergeSort(numeros, ini, meio); mergeSort(numeros, meio+1, fim); merge(numeros, ini, meio, fim); } } 2 8 1 7 3 5 6 4 0 1 2 3 4 5 6 7 ini fimmeio ini2 fim2meio2 fim6ini6 meio6 Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 10 / 19
  • 89. MergeSort C´odigo void mergeSort(int[] numeros, int ini, int fim) { if(ini < fim) { int meio = (ini + fim)/2; mergeSort(numeros, ini, meio); mergeSort(numeros, meio+1, fim); merge(numeros, ini, meio, fim); } } 2 8 1 7 3 5 6 4 0 1 2 3 4 5 6 7 ini fimmeio ini2 fim2meio2 Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 10 / 19
  • 90. MergeSort C´odigo void mergeSort(int[] numeros, int ini, int fim) { if(ini < fim) { int meio = (ini + fim)/2; mergeSort(numeros, ini, meio); mergeSort(numeros, meio+1, fim); merge(numeros, ini, meio, fim); } } 1 2 7 8 3 5 6 4 0 1 2 3 4 5 6 7 ini fimmeio ini2 fim2meio2 Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 10 / 19
  • 91. MergeSort C´odigo void mergeSort(int[] numeros, int ini, int fim) { if(ini < fim) { int meio = (ini + fim)/2; mergeSort(numeros, ini, meio); mergeSort(numeros, meio+1, fim); merge(numeros, ini, meio, fim); } } 1 2 7 8 3 5 6 4 0 1 2 3 4 5 6 7 ini fimmeio Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 10 / 19
  • 92. MergeSort C´odigo void mergeSort(int[] numeros, int ini, int fim) { if(ini < fim) { int meio = (ini + fim)/2; mergeSort(numeros, ini, meio); mergeSort(numeros, meio+1, fim); merge(numeros, ini, meio, fim); } } 1 2 7 8 3 5 6 4 0 1 2 3 4 5 6 7 ini fimmeio fim9ini9 Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 10 / 19
  • 93. MergeSort C´odigo void mergeSort(int[] numeros, int ini, int fim) { if(ini < fim) { int meio = (ini + fim)/2; mergeSort(numeros, ini, meio); mergeSort(numeros, meio+1, fim); merge(numeros, ini, meio, fim); } } 1 2 7 8 3 5 6 4 0 1 2 3 4 5 6 7 ini fimmeio fim9ini9 Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 10 / 19
  • 94. MergeSort C´odigo void mergeSort(int[] numeros, int ini, int fim) { if(ini < fim) { int meio = (ini + fim)/2; mergeSort(numeros, ini, meio); mergeSort(numeros, meio+1, fim); merge(numeros, ini, meio, fim); } } 1 2 7 8 3 5 6 4 0 1 2 3 4 5 6 7 ini fimmeio fim9ini9 meio9 Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 10 / 19
  • 95. MergeSort C´odigo void mergeSort(int[] numeros, int ini, int fim) { if(ini < fim) { int meio = (ini + fim)/2; mergeSort(numeros, ini, meio); mergeSort(numeros, meio+1, fim); merge(numeros, ini, meio, fim); } } 1 2 7 8 3 5 6 4 0 1 2 3 4 5 6 7 ini fimmeio fim9ini9 meio9 ini10 fim10 Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 10 / 19
  • 96. MergeSort C´odigo void mergeSort(int[] numeros, int ini, int fim) { if(ini < fim) { int meio = (ini + fim)/2; mergeSort(numeros, ini, meio); mergeSort(numeros, meio+1, fim); merge(numeros, ini, meio, fim); } } 1 2 7 8 3 5 6 4 0 1 2 3 4 5 6 7 ini fimmeio fim9ini9 meio9 ini10 fim10 Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 10 / 19
  • 97. MergeSort C´odigo void mergeSort(int[] numeros, int ini, int fim) { if(ini < fim) { int meio = (ini + fim)/2; mergeSort(numeros, ini, meio); mergeSort(numeros, meio+1, fim); merge(numeros, ini, meio, fim); } } 1 2 7 8 3 5 6 4 0 1 2 3 4 5 6 7 ini fimmeio fim9ini9 meio9 ini10 fim10 meio10 Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 10 / 19
  • 98. MergeSort C´odigo void mergeSort(int[] numeros, int ini, int fim) { if(ini < fim) { int meio = (ini + fim)/2; mergeSort(numeros, ini, meio); mergeSort(numeros, meio+1, fim); merge(numeros, ini, meio, fim); } } 1 2 7 8 3 5 6 4 0 1 2 3 4 5 6 7 ini fimmeio fim9ini9 meio9 ini10 fim10 meio10 ini11 fim11 Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 10 / 19
  • 99. MergeSort C´odigo void mergeSort(int[] numeros, int ini, int fim) { if(ini < fim) { int meio = (ini + fim)/2; mergeSort(numeros, ini, meio); mergeSort(numeros, meio+1, fim); merge(numeros, ini, meio, fim); } } 1 2 7 8 3 5 6 4 0 1 2 3 4 5 6 7 ini fimmeio fim9ini9 meio9 ini10 fim10 meio10 ini11 fim11 Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 10 / 19
  • 100. MergeSort C´odigo void mergeSort(int[] numeros, int ini, int fim) { if(ini < fim) { int meio = (ini + fim)/2; mergeSort(numeros, ini, meio); mergeSort(numeros, meio+1, fim); merge(numeros, ini, meio, fim); } } 1 2 7 8 3 5 6 4 0 1 2 3 4 5 6 7 ini fimmeio fim9ini9 meio9 ini10 fim10 meio10 Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 10 / 19
  • 101. MergeSort C´odigo void mergeSort(int[] numeros, int ini, int fim) { if(ini < fim) { int meio = (ini + fim)/2; mergeSort(numeros, ini, meio); mergeSort(numeros, meio+1, fim); merge(numeros, ini, meio, fim); } } 1 2 7 8 3 5 6 4 0 1 2 3 4 5 6 7 ini fimmeio fim9ini9 meio9 ini10 fim10 meio10 ini12 fim12 Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 10 / 19
  • 102. MergeSort C´odigo void mergeSort(int[] numeros, int ini, int fim) { if(ini < fim) { int meio = (ini + fim)/2; mergeSort(numeros, ini, meio); mergeSort(numeros, meio+1, fim); merge(numeros, ini, meio, fim); } } 1 2 7 8 3 5 6 4 0 1 2 3 4 5 6 7 ini fimmeio fim9ini9 meio9 ini10 fim10 meio10 ini12 fim12 Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 10 / 19
  • 103. MergeSort C´odigo void mergeSort(int[] numeros, int ini, int fim) { if(ini < fim) { int meio = (ini + fim)/2; mergeSort(numeros, ini, meio); mergeSort(numeros, meio+1, fim); merge(numeros, ini, meio, fim); } } 1 2 7 8 3 5 6 4 0 1 2 3 4 5 6 7 ini fimmeio fim9ini9 meio9 ini10 fim10 meio10 Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 10 / 19
  • 104. MergeSort C´odigo void mergeSort(int[] numeros, int ini, int fim) { if(ini < fim) { int meio = (ini + fim)/2; mergeSort(numeros, ini, meio); mergeSort(numeros, meio+1, fim); merge(numeros, ini, meio, fim); } } 1 2 7 8 3 5 6 4 0 1 2 3 4 5 6 7 ini fimmeio fim9ini9 meio9 ini10 fim10 meio10 Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 10 / 19
  • 105. MergeSort C´odigo void mergeSort(int[] numeros, int ini, int fim) { if(ini < fim) { int meio = (ini + fim)/2; mergeSort(numeros, ini, meio); mergeSort(numeros, meio+1, fim); merge(numeros, ini, meio, fim); } } 1 2 7 8 3 5 6 4 0 1 2 3 4 5 6 7 ini fimmeio fim9ini9 meio9 Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 10 / 19
  • 106. MergeSort C´odigo void mergeSort(int[] numeros, int ini, int fim) { if(ini < fim) { int meio = (ini + fim)/2; mergeSort(numeros, ini, meio); mergeSort(numeros, meio+1, fim); merge(numeros, ini, meio, fim); } } 1 2 7 8 3 5 6 4 0 1 2 3 4 5 6 7 ini fimmeio fim9ini9 meio9 fim13ini13 Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 10 / 19
  • 107. MergeSort C´odigo void mergeSort(int[] numeros, int ini, int fim) { if(ini < fim) { int meio = (ini + fim)/2; mergeSort(numeros, ini, meio); mergeSort(numeros, meio+1, fim); merge(numeros, ini, meio, fim); } } 1 2 7 8 3 5 6 4 0 1 2 3 4 5 6 7 ini fimmeio fim9ini9 meio9 fim13ini13 Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 10 / 19
  • 108. MergeSort C´odigo void mergeSort(int[] numeros, int ini, int fim) { if(ini < fim) { int meio = (ini + fim)/2; mergeSort(numeros, ini, meio); mergeSort(numeros, meio+1, fim); merge(numeros, ini, meio, fim); } } 1 2 7 8 3 5 6 4 0 1 2 3 4 5 6 7 ini fimmeio fim9ini9 meio9 fim13ini13 meio13 Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 10 / 19
  • 109. MergeSort C´odigo void mergeSort(int[] numeros, int ini, int fim) { if(ini < fim) { int meio = (ini + fim)/2; mergeSort(numeros, ini, meio); mergeSort(numeros, meio+1, fim); merge(numeros, ini, meio, fim); } } 1 2 7 8 3 5 6 4 0 1 2 3 4 5 6 7 ini fimmeio fim9ini9 meio9 fim13ini13 meio13 ini14 fim14 Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 10 / 19
  • 110. MergeSort C´odigo void mergeSort(int[] numeros, int ini, int fim) { if(ini < fim) { int meio = (ini + fim)/2; mergeSort(numeros, ini, meio); mergeSort(numeros, meio+1, fim); merge(numeros, ini, meio, fim); } } 1 2 7 8 3 5 6 4 0 1 2 3 4 5 6 7 ini fimmeio fim9ini9 meio9 fim13ini13 meio13 ini14 fim14 Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 10 / 19
  • 111. MergeSort C´odigo void mergeSort(int[] numeros, int ini, int fim) { if(ini < fim) { int meio = (ini + fim)/2; mergeSort(numeros, ini, meio); mergeSort(numeros, meio+1, fim); merge(numeros, ini, meio, fim); } } 1 2 7 8 3 5 6 4 0 1 2 3 4 5 6 7 ini fimmeio fim9ini9 meio9 fim13ini13 meio13 Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 10 / 19
  • 112. MergeSort C´odigo void mergeSort(int[] numeros, int ini, int fim) { if(ini < fim) { int meio = (ini + fim)/2; mergeSort(numeros, ini, meio); mergeSort(numeros, meio+1, fim); merge(numeros, ini, meio, fim); } } 1 2 7 8 3 5 6 4 0 1 2 3 4 5 6 7 ini fimmeio fim9ini9 meio9 fim13ini13 meio13 ini15 fim15 Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 10 / 19
  • 113. MergeSort C´odigo void mergeSort(int[] numeros, int ini, int fim) { if(ini < fim) { int meio = (ini + fim)/2; mergeSort(numeros, ini, meio); mergeSort(numeros, meio+1, fim); merge(numeros, ini, meio, fim); } } 1 2 7 8 3 5 6 4 0 1 2 3 4 5 6 7 ini fimmeio fim9ini9 meio9 fim13ini13 meio13 ini15 fim15 Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 10 / 19
  • 114. MergeSort C´odigo void mergeSort(int[] numeros, int ini, int fim) { if(ini < fim) { int meio = (ini + fim)/2; mergeSort(numeros, ini, meio); mergeSort(numeros, meio+1, fim); merge(numeros, ini, meio, fim); } } 1 2 7 8 3 5 6 4 0 1 2 3 4 5 6 7 ini fimmeio fim9ini9 meio9 fim13ini13 meio13 Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 10 / 19
  • 115. MergeSort C´odigo void mergeSort(int[] numeros, int ini, int fim) { if(ini < fim) { int meio = (ini + fim)/2; mergeSort(numeros, ini, meio); mergeSort(numeros, meio+1, fim); merge(numeros, ini, meio, fim); } } 1 2 7 8 3 5 4 6 0 1 2 3 4 5 6 7 ini fimmeio fim9ini9 meio9 fim13ini13 meio13 Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 10 / 19
  • 116. MergeSort C´odigo void mergeSort(int[] numeros, int ini, int fim) { if(ini < fim) { int meio = (ini + fim)/2; mergeSort(numeros, ini, meio); mergeSort(numeros, meio+1, fim); merge(numeros, ini, meio, fim); } } 1 2 7 8 3 5 4 6 0 1 2 3 4 5 6 7 ini fimmeio fim9ini9 meio9 Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 10 / 19
  • 117. MergeSort C´odigo void mergeSort(int[] numeros, int ini, int fim) { if(ini < fim) { int meio = (ini + fim)/2; mergeSort(numeros, ini, meio); mergeSort(numeros, meio+1, fim); merge(numeros, ini, meio, fim); } } 1 2 7 8 3 4 5 6 0 1 2 3 4 5 6 7 ini fimmeio fim9ini9 meio9 Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 10 / 19
  • 118. MergeSort C´odigo void mergeSort(int[] numeros, int ini, int fim) { if(ini < fim) { int meio = (ini + fim)/2; mergeSort(numeros, ini, meio); mergeSort(numeros, meio+1, fim); merge(numeros, ini, meio, fim); } } 1 2 7 8 3 4 5 6 0 1 2 3 4 5 6 7 ini fimmeio Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 10 / 19
  • 119. MergeSort C´odigo void mergeSort(int[] numeros, int ini, int fim) { if(ini < fim) { int meio = (ini + fim)/2; mergeSort(numeros, ini, meio); mergeSort(numeros, meio+1, fim); merge(numeros, ini, meio, fim); } } 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 ini fimmeio Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 10 / 19
  • 120. MergeSort Complexidade da Fus˜ao void merge(int[] A, int p, int q, int r) { int i, j, k; int tamseq1 = q - p + 1; int tamseq2 = r - q; int [] seq1 = new int [tamseq1]; for(i=0; i < seq1.length; i++) seq1[i] = A[p+i]; int [] seq2 = new int [tamseq2]; for(j=0; j < seq2.length; j++) seq2[j] = A[q+1+j]; Qual a complexidade do merge? Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 11 / 19
  • 121. MergeSort Complexidade da Fus˜ao void merge(int[] A, int p, int q, int r) { int i, j, k; int tamseq1 = q - p + 1; int tamseq2 = r - q; int [] seq1 = new int [tamseq1]; for(i=0; i < seq1.length; i++) seq1[i] = A[p+i]; int [] seq2 = new int [tamseq2]; for(j=0; j < seq2.length; j++) seq2[j] = A[q+1+j]; Qual a complexidade do merge? Θ(n) Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 11 / 19
  • 122. MergeSort Complexidade da Fus˜ao void merge(int[] A, int p, int q, int r) { int i, j, k; int tamseq1 = q - p + 1; int tamseq2 = r - q; int [] seq1 = new int [tamseq1]; for(i=0; i < seq1.length; i++) seq1[i] = A[p+i]; int [] seq2 = new int [tamseq2]; for(j=0; j < seq2.length; j++) seq2[j] = A[q+1+j]; Qual a complexidade do merge? Θ(n) +Θ(n) Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 11 / 19
  • 123. MergeSort Complexidade da Fus˜ao k = p; i = 0; j = 0; while (i < seq1.length && j < seq2.length) { if(seq2[j] <= seq1[i]) { A[k] = seq2[j]; j++; } else { A[k] = seq1[i]; i++; } k++; } Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 12 / 19
  • 124. MergeSort Complexidade da Fus˜ao k = p; i = 0; j = 0; while (i < seq1.length && j < seq2.length) { if(seq2[j] <= seq1[i]) { A[k] = seq2[j]; j++; } else { A[k] = seq1[i]; i++; } k++; } +Θ(n) Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 12 / 19
  • 125. MergeSort Complexidade da Fus˜ao while (i < seq1.length) { A[k] = seq1[i]; k++; i++; } while (j < seq2.length) { A[k] = seq2[j]; k++; j++; } } Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 13 / 19
  • 126. MergeSort Complexidade da Fus˜ao while (i < seq1.length) { A[k] = seq1[i]; k++; i++; } while (j < seq2.length) { A[k] = seq2[j]; k++; j++; } } +Θ(n) Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 13 / 19
  • 127. MergeSort Complexidade da Fus˜ao while (i < seq1.length) { A[k] = seq1[i]; k++; i++; } while (j < seq2.length) { A[k] = seq2[j]; k++; j++; } } +Θ(n) Ou seja, merge, no total, ´e Θ(n) Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 13 / 19
  • 128. MergeSort Complexidade do MergeSort void mergeSort(int[] numeros, int ini, int fim) { if(ini < fim) { int meio = (ini + fim)/2; mergeSort(numeros, ini, meio); mergeSort(numeros, meio+1, fim); merge(numeros, ini, meio, fim); } } E do MergeSort? Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 14 / 19
  • 129. MergeSort Complexidade do MergeSort void mergeSort(int[] numeros, int ini, int fim) { if(ini < fim) { int meio = (ini + fim)/2; mergeSort(numeros, ini, meio); mergeSort(numeros, meio+1, fim); merge(numeros, ini, meio, fim); } } E do MergeSort? T(n/2) Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 14 / 19
  • 130. MergeSort Complexidade do MergeSort void mergeSort(int[] numeros, int ini, int fim) { if(ini < fim) { int meio = (ini + fim)/2; mergeSort(numeros, ini, meio); mergeSort(numeros, meio+1, fim); merge(numeros, ini, meio, fim); } } E do MergeSort? T(n/2) +T(n/2) Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 14 / 19
  • 131. MergeSort Complexidade do MergeSort void mergeSort(int[] numeros, int ini, int fim) { if(ini < fim) { int meio = (ini + fim)/2; mergeSort(numeros, ini, meio); mergeSort(numeros, meio+1, fim); merge(numeros, ini, meio, fim); } } E do MergeSort? T(n/2) +T(n/2) +Θ(n) Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 14 / 19
  • 132. MergeSort Complexidade do MergeSort void mergeSort(int[] numeros, int ini, int fim) { if(ini < fim) { int meio = (ini + fim)/2; mergeSort(numeros, ini, meio); mergeSort(numeros, meio+1, fim); merge(numeros, ini, meio, fim); } } E do MergeSort? T(n/2) +T(n/2) +Θ(n) Ent˜ao T(n) = O(1) se n = 1 2T(n/2) + Θ(n) para n ≥ 2 Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 14 / 19
  • 133. MergeSort Complexidade do MergeSort Pelo Teorema Mestre, T(n) = O(1) se n = 1 2T(n/2) + Θ(n) para n ≥ 2 cai no caso 2, fazendo com que T(n) = Θ(n log n) Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 15 / 19
  • 134. MergeSort Complexidade do MergeSort ´E poss´ıvel fazer a intercala¸c˜ao dos sub-arranjos ordenados sem o uso de arranjos auxiliares? Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 16 / 19
  • 135. MergeSort Complexidade do MergeSort ´E poss´ıvel fazer a intercala¸c˜ao dos sub-arranjos ordenados sem o uso de arranjos auxiliares? Sim! Basta deslocarmos os elementos de um dos sub-arranjos, quando necess´ario, para dar lugar ao m´ınimo dos dois sub-arranjos Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 16 / 19
  • 136. MergeSort Complexidade do MergeSort ´E poss´ıvel fazer a intercala¸c˜ao dos sub-arranjos ordenados sem o uso de arranjos auxiliares? Sim! Basta deslocarmos os elementos de um dos sub-arranjos, quando necess´ario, para dar lugar ao m´ınimo dos dois sub-arranjos No entanto, a etapa de intercala¸c˜ao passa a ter complexidade Θ(n2 ), resultando na recorrˆencia T(n) = O(1) se n = 1 2T(n/2) + Θ(n2 ) para n ≥ 2 Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 16 / 19
  • 137. MergeSort Complexidade do MergeSort T(n) = O(1) se n = 1 2T(n/2) + Θ(n2 ) para n ≥ 2 Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 17 / 19
  • 138. MergeSort Complexidade do MergeSort T(n) = O(1) se n = 1 2T(n/2) + Θ(n2 ) para n ≥ 2 Pelo Teorema Mestre (caso 3), T(n) ∈ Θ(n2 ) Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 17 / 19
  • 139. MergeSort Complexidade do MergeSort T(n) = O(1) se n = 1 2T(n/2) + Θ(n2 ) para n ≥ 2 Pelo Teorema Mestre (caso 3), T(n) ∈ Θ(n2 ) Ou seja, a complexidade do MergeSort passa a ser Θ(n2 ) Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 17 / 19
  • 140. MergeSort Complexidade do MergeSort T(n) = O(1) se n = 1 2T(n/2) + Θ(n2 ) para n ≥ 2 Pelo Teorema Mestre (caso 3), T(n) ∈ Θ(n2 ) Ou seja, a complexidade do MergeSort passa a ser Θ(n2 ) Dessa forma, a eficiˆencia da etapa de intercala¸c˜ao ´e crucial para a eficiˆencia do MergeSort Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 17 / 19
  • 141. MergeSort × Quicksort Mergesort Melhor caso: O(n log n) Pior caso: O(n log n) Caso m´edio: O(n log n) Ordena¸c˜ao: Necessita de arranjos auxiliares Quicksort Melhor caso: O(n log n) Pior caso: O(n2 ) Caso m´edio: O(n log n) Ordena¸c˜ao: Local. N˜ao necessita de arranjos auxiliares Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 18 / 19
  • 142. Referˆencias Cormen, Thomas H., Leiserson, Charles E., Rivest, Ronald L., Stein, Clifford. Introduction to Algorithms. 2a ed. MIT Press, 2001. Material baseado em slides dos professores Delano Beder e Marcos Chain Norton Trevisan Romannorton@usp.br Aula 15 – Algoritmos de Ordena¸c˜ao: Divis˜ao e Conquista (MergeSort)9 de outubro de 2018 19 / 19