Você está na página 1de 81

Unidade V:

Ordenação Interna - Mergesort

Instituto de Ciências Exatas e Informática


Departamento de Ciência da Computação
Mergesort

Agenda
• Funcionamento básico

• Algoritmo em C#

• Análise dos número de comparações e movimentações

• Conclusão

---------------------------- Algoritmos e Estruturas de Dados (2)


Mergesort

Agenda
• Funcionamento básico

• Algoritmo em C#

• Análise dos número de comparações e movimentações

• Conclusão

---------------------------- Algoritmos e Estruturas de Dados (3)


Mergesort

Introdução
• Ordenação por intercalação

• Algoritmo de ordenação do tipo dividir para conquistar

• Normalmente, implementado de forma recursiva e demandando um


espaço adicional de memória (não é um algoritmo in-place)

---------------------------- Algoritmos e Estruturas de Dados (4)


Mergesort

Introdução
• Ordenação por intercalação

• Algoritmo de ordenação do tipo dividir para conquistar

• Normalmente, implementado de forma recursiva e demandando um


espaço adicional de memória (não é um algoritmo in-place)

Um algoritmo de ordenação é in-place se a memória


adicional requerida é independente do tamanho do array

---------------------------- Algoritmos e Estruturas de Dados (5)


Mergesort

Funcionamento Básico
• Dividir sistematicamente o array em subarrays até que os mesmos tenham
tamanho um

• Conquistar através da intercalação (ordenada) sistemática de dois em dois


subarrays

---------------------------- Algoritmos e Estruturas de Dados (6)


Mergesort

Exercício Resolvido (1)


• Faça a intercalação (ordenada) dos dois vetores [1 2 3 4 9] e [3 5 6 7 8]

---------------------------- Algoritmos e Estruturas de Dados (7)


Mergesort

Exercício Resolvido (1)


• Faça a intercalação (ordenada) dos dois vetores [1 2 3 4 9] e [3 5 6 7 8]
[ ]

---------------------------- Algoritmos e Estruturas de Dados (8)


Mergesort

Exercício Resolvido (1)


• Faça a intercalação (ordenada) dos dois vetores [1 2 3 4 9] e [3 5 6 7 8]
[ ]
[1]

---------------------------- Algoritmos e Estruturas de Dados (9)


Mergesort

Exercício Resolvido (1)


• Faça a intercalação (ordenada) dos dois vetores [1 2 3 4 9] e [3 5 6 7 8]
[ ]
[1]
[12]

---------------------------- Algoritmos e Estruturas de Dados (10)


Mergesort

Exercício Resolvido (1)


• Faça a intercalação (ordenada) dos dois vetores [1 2 3 4 9] e [3 5 6 7 8]
[ ]
[1]
[12]
[123]

---------------------------- Algoritmos e Estruturas de Dados (11)


Mergesort

Exercício Resolvido (1)


• Faça a intercalação (ordenada) dos dois vetores [1 2 3 4 9] e [3 5 6 7 8]
[ ]
[1]
[12]
[123]
[1233]

---------------------------- Algoritmos e Estruturas de Dados (12)


Mergesort

Exercício Resolvido (1)


• Faça a intercalação (ordenada) dos dois vetores [1 2 3 4 9] e [3 5 6 7 8]
[ ]
[1]
[12]
[123]
[1233]
[12334]

---------------------------- Algoritmos e Estruturas de Dados (13)


Mergesort

Exercício Resolvido (1)


• Faça a intercalação (ordenada) dos dois vetores [1 2 3 4 9] e [3 5 6 7 8]
[ ]
[1]
[12]
[123]
[1233]
[12334]
[123345]

---------------------------- Algoritmos e Estruturas de Dados (14)


Mergesort

Exercício Resolvido (1)


• Faça a intercalação (ordenada) dos dois vetores [1 2 3 4 9] e [3 5 6 7 8]
[ ]
[1]
[12]
[123]
[1233]
[12334]
[123345]
[1233456]

---------------------------- Algoritmos e Estruturas de Dados (15)


Mergesort

Exercício Resolvido (1)


• Faça a intercalação (ordenada) dos dois vetores [1 2 3 4 9] e [3 5 6 7 8]
[ ]
[1]
[12]
[123]
[1233]
[12334]
[123345]
[1233456]
[ 1 2 3 3 4 5 6 7]

---------------------------- Algoritmos e Estruturas de Dados (16)


Mergesort

Exercício Resolvido (1)


• Faça a intercalação (ordenada) dos dois vetores [1 2 3 4 9] e [3 5 6 7 8]
[ ]
[1]
[12]
[123]
[1233]
[12334]
[123345]
[1233456]
[ 1 2 3 3 4 5 6 7]
[123345678]

---------------------------- Algoritmos e Estruturas de Dados (17)


Mergesort

Exercício Resolvido (1)


• Faça a intercalação (ordenada) dos dois vetores [1 2 3 4 9] e [3 5 6 7 8]
[ ]
[1]
[12]
[123]
[1233]
[12334]
[123345]
[1233456]
[ 1 2 3 3 4 5 6 7]
[123345678]
[1233456789]

---------------------------- Algoritmos e Estruturas de Dados (18)


Mergesort

Exemplo

95 15 42 4 23 16 8 77

Dividir

Conquistar (intercalação ou merge)

Subarray aguardando divisão

Elemento a ser intercalado no subarray


---------------------------- Algoritmos e Estruturas de Dados (19)
Mergesort

Exemplo

95 15 42 4 23 16 8 77

---------------------------- Algoritmos e Estruturas de Dados (20)


Mergesort

Exemplo

95 15 42 4 23 16 8 77

95 15 42 4 23 16 8 77

---------------------------- Algoritmos e Estruturas de Dados (21)


Mergesort

Exemplo

95 15 42 4 23 16 8 77

95 15 42 4 23 16 8 77

---------------------------- Algoritmos e Estruturas de Dados (22)


Mergesort

Exemplo

95 15 42 4 23 16 8 77

95 15 42 4 23 16 8 77

95 15 42 4

---------------------------- Algoritmos e Estruturas de Dados (23)


Mergesort

Exemplo

95 15 42 4 23 16 8 77

95 15 42 4 23 16 8 77

95 15 42 4

---------------------------- Algoritmos e Estruturas de Dados (24)


Mergesort

Exemplo

95 15 42 4 23 16 8 77

95 15 42 4 23 16 8 77

95 15 42 4

95 15

---------------------------- Algoritmos e Estruturas de Dados (25)


Mergesort

Exemplo

95 15 42 4 23 16 8 77

95 15 42 4 23 16 8 77

42 4

95 15

---------------------------- Algoritmos e Estruturas de Dados (26)


Mergesort

Exemplo

95 15 42 4 23 16 8 77

95 15 42 4 23 16 8 77

15 42 4

95 x
15

---------------------------- Algoritmos e Estruturas de Dados (27)


Mergesort

Exemplo

95 15 42 4 23 16 8 77

95 15 42 4 23 16 8 77

15 95 42 4

95x x
15

---------------------------- Algoritmos e Estruturas de Dados (28)


Mergesort

Exemplo

95 15 42 4 23 16 8 77

95 15 42 4 23 16 8 77

15 95 42 4

---------------------------- Algoritmos e Estruturas de Dados (29)


Mergesort

Exemplo

95 15 42 4 23 16 8 77

95 15 42 4 23 16 8 77

15 95 42 4

---------------------------- Algoritmos e Estruturas de Dados (30)


Mergesort

Exemplo

95 15 42 4 23 16 8 77

95 15 42 4 23 16 8 77

15 95 42 4

42 4

---------------------------- Algoritmos e Estruturas de Dados (31)


Mergesort

Exemplo

95 15 42 4 23 16 8 77

95 15 42 4 23 16 8 77

15 95

42 4

---------------------------- Algoritmos e Estruturas de Dados (32)


Mergesort

Exemplo

95 15 42 4 23 16 8 77

95 15 42 4 23 16 8 77

15 95 4

42 x4
---------------------------- Algoritmos e Estruturas de Dados (33)
Mergesort

Exemplo

95 15 42 4 23 16 8 77

95 15 42 4 23 16 8 77

15 95 4 42

x
42 x4
---------------------------- Algoritmos e Estruturas de Dados (34)
Mergesort

Exemplo

95 15 42 4 23 16 8 77

95 15 42 4 23 16 8 77

15 95 4 42

---------------------------- Algoritmos e Estruturas de Dados (35)


Mergesort

Exemplo

95 15 42 4 23 16 8 77

23 16 8 77

15 95 4 42

---------------------------- Algoritmos e Estruturas de Dados (36)


Mergesort

Exemplo

95 15 42 4 23 16 8 77

4 23 16 8 77

15 95 x4 42

---------------------------- Algoritmos e Estruturas de Dados (37)


Mergesort

Exemplo

95 15 42 4 23 16 8 77

4 15 23 16 8 77

x
15 95 x4 42

---------------------------- Algoritmos e Estruturas de Dados (38)


Mergesort

Exemplo

95 15 42 4 23 16 8 77

4 15 42 23 16 8 77

x
15 95 x4 42
x

---------------------------- Algoritmos e Estruturas de Dados (39)


Mergesort

Exemplo

95 15 42 4 23 16 8 77

4 15 42 95 23 16 8 77

x 95
15 x x4 42
x

---------------------------- Algoritmos e Estruturas de Dados (40)


Mergesort

Exemplo

95 15 42 4 23 16 8 77

4 15 42 95 23 16 8 77

---------------------------- Algoritmos e Estruturas de Dados (41)


Mergesort

Exemplo

95 15 42 4 23 16 8 77

4 15 42 95 23 16 8 77

---------------------------- Algoritmos e Estruturas de Dados (42)


Mergesort

Exemplo

95 15 42 4 23 16 8 77

4 15 42 95 23 16 8 77

23 16 8 77

---------------------------- Algoritmos e Estruturas de Dados (43)


Mergesort

Exemplo

95 15 42 4 23 16 8 77

4 15 42 95 23 16 8 77

23 16 8 77

---------------------------- Algoritmos e Estruturas de Dados (44)


Mergesort

Exemplo

95 15 42 4 23 16 8 77

4 15 42 95 23 16 8 77

23 16 8 77

23 16

---------------------------- Algoritmos e Estruturas de Dados (45)


Mergesort

Exemplo

95 15 42 4 23 16 8 77

4 15 42 95 23 16 8 77

8 77

23 16

---------------------------- Algoritmos e Estruturas de Dados (46)


Mergesort

Exemplo

95 15 42 4 23 16 8 77

4 15 42 95 23 16 8 77

16 8 77

23 x
16

---------------------------- Algoritmos e Estruturas de Dados (47)


Mergesort

Exemplo

95 15 42 4 23 16 8 77

4 15 42 95 23 16 8 77

16 23 8 77

x
23 x
16

---------------------------- Algoritmos e Estruturas de Dados (48)


Mergesort

Exemplo

95 15 42 4 23 16 8 77

4 15 42 95 23 16 8 77

16 23 8 77

---------------------------- Algoritmos e Estruturas de Dados (49)


Mergesort

Exemplo

95 15 42 4 23 16 8 77

4 15 42 95 23 16 8 77

16 23 8 77

---------------------------- Algoritmos e Estruturas de Dados (50)


Mergesort

Exemplo

95 15 42 4 23 16 8 77

4 15 42 95 23 16 8 77

16 23 8 77

8 77

---------------------------- Algoritmos e Estruturas de Dados (51)


Mergesort

Exemplo

95 15 42 4 23 16 8 77

4 15 42 95 23 16 8 77

16 23

8 77

---------------------------- Algoritmos e Estruturas de Dados (52)


Mergesort

Exemplo

95 15 42 4 23 16 8 77

4 15 42 95 23 16 8 77

16 23 8

x8 77

---------------------------- Algoritmos e Estruturas de Dados (53)


Mergesort

Exemplo

95 15 42 4 23 16 8 77

4 15 42 95 23 16 8 77

16 23 8 77

x8 x
77

---------------------------- Algoritmos e Estruturas de Dados (54)


Mergesort

Exemplo

95 15 42 4 23 16 8 77

4 15 42 95 23 16 8 77

16 23 8 77

---------------------------- Algoritmos e Estruturas de Dados (55)


Mergesort

Exemplo

95 15 42 4 23 16 8 77

4 15 42 95

16 23 8 77

---------------------------- Algoritmos e Estruturas de Dados (56)


Mergesort

Exemplo

95 15 42 4 23 16 8 77

4 15 42 95 8

16 23 x8 77

---------------------------- Algoritmos e Estruturas de Dados (57)


Mergesort

Exemplo

95 15 42 4 23 16 8 77

4 15 42 95 8 16

x
16 23 x8 77

---------------------------- Algoritmos e Estruturas de Dados (58)


Mergesort

Exemplo

95 15 42 4 23 16 8 77

4 15 42 95 8 16 23

x 23
16x x8 77

---------------------------- Algoritmos e Estruturas de Dados (59)


Mergesort

Exemplo

95 15 42 4 23 16 8 77

4 15 42 95 8 16 23 77

x 23
16x x8 77
x

---------------------------- Algoritmos e Estruturas de Dados (60)


Mergesort

Exemplo

95 15 42 4 23 16 8 77

4 15 42 95 8 16 23 77

---------------------------- Algoritmos e Estruturas de Dados (61)


Mergesort

Exemplo

4 15 42 95 8 16 23 77

---------------------------- Algoritmos e Estruturas de Dados (62)


Mergesort

Exemplo

x4 15 42 95 8 16 23 77

---------------------------- Algoritmos e Estruturas de Dados (63)


Mergesort

Exemplo

4 8

x4 15 42 95 x8 16 23 77

---------------------------- Algoritmos e Estruturas de Dados (64)


Mergesort

Exemplo

4 8 15

x4 x15 42 95 x8 16 23 77

---------------------------- Algoritmos e Estruturas de Dados (65)


Mergesort

Exemplo

4 8 15 16

x4 x15 42 95 x8 16
x 23 77

---------------------------- Algoritmos e Estruturas de Dados (66)


Mergesort

Exemplo

4 8 15 16 23

x4 x15 42 95 x8 16
x 23
x 77

---------------------------- Algoritmos e Estruturas de Dados (67)


Mergesort

Exemplo

4 8 15 16 23 42

x4 x15 42
x 95 x8 16
x 23
x 77

---------------------------- Algoritmos e Estruturas de Dados (68)


Mergesort

Exemplo

4 8 15 16 23 42 77

x4 x15 42
x 95 x8 16
x 23
x 77
x

---------------------------- Algoritmos e Estruturas de Dados (69)


Mergesort

Exemplo

4 8 15 16 23 42 77 95

x4 x15 42
x 95
x x8 16
x 23
x 77
x

---------------------------- Algoritmos e Estruturas de Dados (70)


Mergesort

Exemplo

4 8 15 16 23 42 77 95

---------------------------- Algoritmos e Estruturas de Dados (71)


Mergesort

Agenda
• Funcionamento básico

• Algoritmo em C#

• Análise dos número de comparações e movimentações

• Conclusão

---------------------------- Algoritmos e Estruturas de Dados (72)


Mergesort

Algoritmo em C#
void mergesort(int esq, int dir) {
if (esq < dir){
int meio = (esq + dir) / 2;
mergesort(esq, meio);
mergesort(meio + 1, dir);
intercalar(esq, meio, dir);
}
}

---------------------------- Algoritmos e Estruturas de Dados (73)


Mergesort

Algoritmo em C#
void intercalar(int esq, int meio, int dir){
//Definir tamanho dos dois subarrays
int nEsq = (meio+1)-esq;
int nDir = dir - meio;

int[] arrayEsq = new int[nEsq+1];


int[] arrayDir = new int[nDir+1];

//Sentinela no final dos dois arrays


arrayEsq[nEsq] = arrayDir[nDir] = 0x7FFFFFFF;

...
---------------------------- Algoritmos e Estruturas de Dados (74)
Mergesort

Algoritmo em C#

int iEsq, iDir, i;


...
//Inicializar primeiro subarray
for (iEsq = 0; iEsq < nEsq; iEsq++){
arrayEsq[iEsq] = array[esq+iEsq];
}
//Inicializar segundo subarray
for (iDir = 0; iDir < nDir; iDir++){
arrayDir[iDir] = array[(meio+1)+iDir];
}
//Intercalacao propriamente dita
for (iEsq = iDir = 0, i = esq; i <= dir; i++){
array[i] = (arrayEsq[iEsq] <= arrayDir[iDir]) ? arrayEsq[iEsq++] : arrayDir[iDir++];
}
}

---------------------------- Algoritmos e Estruturas de Dados (75)


Mergesort

Agenda
• Funcionamento básico

• Algoritmo em C#

• Análise dos número de comparações e movimentações

• Conclusão

---------------------------- Algoritmos e Estruturas de Dados (76)


Mergesort

Análise do Número de Comparações


• Todos os casos:
○ Em cada subarray (tamanho k), fazemos k - 1 comparações
○ Supondo que o tamanho do array é uma potência de 2, fazemos
lg(n) passos

{ C(1) = 0
C(n) = 2C(n/2) + 𝚯(n)
𝚯(n*lg(n))

---------------------------- Algoritmos e Estruturas de Dados (77)


Mergesort

Análise do Número de Movimentações


• Todos os casos:
○ Movimentamos os elementos de cada subarray duas vezes

{ M(1) = 0
M(n) = 2M(n/2) + 𝚯(n)
𝚯(n*lg(n))

---------------------------- Algoritmos e Estruturas de Dados (78)


Mergesort

Agenda
• Funcionamento básico

• Algoritmo em C#

• Análise dos número de comparações e movimentações

• Conclusão

---------------------------- Algoritmos e Estruturas de Dados (79)


Mergesort

Conclusão
• Método estável

• Normalmente, implementado de forma recursiva e demandando memória


adicional

• Faz 𝚯(n*lg(n)) comparações nos três casos (melhor, médio e pior)

---------------------------- Algoritmos e Estruturas de Dados (80)


Mergesort

Exercício (1)
• Mostre todas as comparações e movimentações do algoritmo anterior para
o array abaixo:

---------------------------- Algoritmos e Estruturas de Dados (81)

Você também pode gostar