métodos de ordenação eficiente · 2019-11-29 · cabe ressaltar que há outros métodos de...
TRANSCRIPT
![Page 1: Métodos de Ordenação Eficiente · 2019-11-29 · Cabe ressaltar que há outros métodos de ordenação interessantes que não foram abordados nesta disciplina. Por exemplo, o método](https://reader034.vdocuments.net/reader034/viewer/2022043010/5fa07d38e1221f411d3e9609/html5/thumbnails/1.jpg)
Programação De Computadores II
Métodos de Ordenação Eficiente
Slides adaptados do Profº Paulo Afonso - UFLA
Profª ValériaProfº Jadson
![Page 2: Métodos de Ordenação Eficiente · 2019-11-29 · Cabe ressaltar que há outros métodos de ordenação interessantes que não foram abordados nesta disciplina. Por exemplo, o método](https://reader034.vdocuments.net/reader034/viewer/2022043010/5fa07d38e1221f411d3e9609/html5/thumbnails/2.jpg)
2
◻Algoritmos Insertion sort e Selection sort⬜Em geral são pouco eficientes
◻Utilizar algoritmos que utilizam a estratégia de divisão e conquista⬜Quick Sort
⬜Merge Sort
Introdução
![Page 3: Métodos de Ordenação Eficiente · 2019-11-29 · Cabe ressaltar que há outros métodos de ordenação interessantes que não foram abordados nesta disciplina. Por exemplo, o método](https://reader034.vdocuments.net/reader034/viewer/2022043010/5fa07d38e1221f411d3e9609/html5/thumbnails/3.jpg)
3
◻É o algoritmo de ordenação interna mais rápido que se conhece para uma ampla variedade de situações.
◻A ideia básica é dividir o problema de ordenar um conjunto com N itens em problemas menores sucessivas vezes.
Quick Sort
![Page 4: Métodos de Ordenação Eficiente · 2019-11-29 · Cabe ressaltar que há outros métodos de ordenação interessantes que não foram abordados nesta disciplina. Por exemplo, o método](https://reader034.vdocuments.net/reader034/viewer/2022043010/5fa07d38e1221f411d3e9609/html5/thumbnails/4.jpg)
4
◻ A parte mais delicada do método é relativa à partição do vetor.
◻ O vetor v[esq...dir] é particionado, por meio da escolha arbitrária de um pivô x, em:
⬜Uma parte esquerda com chaves menores ou iguais a x: os itens v[esq], v[esq + 1], ..., v[j].
⬜Uma parte direita com chaves maiores ou iguais a x: os itens v[i], v[i + 1], ..., v[dir].
Quick Sort
![Page 5: Métodos de Ordenação Eficiente · 2019-11-29 · Cabe ressaltar que há outros métodos de ordenação interessantes que não foram abordados nesta disciplina. Por exemplo, o método](https://reader034.vdocuments.net/reader034/viewer/2022043010/5fa07d38e1221f411d3e9609/html5/thumbnails/5.jpg)
5
◻ Funcionamento do particionamento:1. Escolha arbitrariamente um pivô x.
2. Percorra o vetor a partir da esquerda até que v[i] ≥x.
3. Percorra o vetor a partir da direita até que v[j] x≤ .
4. Troque v[i] com v[j].
5. Incremente o valor de i e decremente o valor de j.
6. Continue este processo (passos 2 A 5) até os índices i e j se cruzarem.
Quick Sort
![Page 6: Métodos de Ordenação Eficiente · 2019-11-29 · Cabe ressaltar que há outros métodos de ordenação interessantes que não foram abordados nesta disciplina. Por exemplo, o método](https://reader034.vdocuments.net/reader034/viewer/2022043010/5fa07d38e1221f411d3e9609/html5/thumbnails/6.jpg)
6
◻ Ilustração do processo de partição:
◻ Passo 1: escolha arbitrariamente um pivô x.⬜O pivô é dado por v[(i + j)/2], onde i = índice inicial e j
= índice final do vetor.⬜Se a divisão (i + j)/2 não for um número inteiro,
considera-se o piso. ⬜Como inicialmente, i = 0 e j = 5, então x = v[2] = D.
0 1 2 3 4 5O R D E N A
Quick Sort
![Page 7: Métodos de Ordenação Eficiente · 2019-11-29 · Cabe ressaltar que há outros métodos de ordenação interessantes que não foram abordados nesta disciplina. Por exemplo, o método](https://reader034.vdocuments.net/reader034/viewer/2022043010/5fa07d38e1221f411d3e9609/html5/thumbnails/7.jpg)
7
◻ Passo 2: percorra o vetor a partir da esquerda até que v[i] x≥ .
◻ Passo 3: percorra o vetor a partir da direita até que v[j] x≤ .
0 1 2 3 4 5O R D E N Ai j
0 1 2 3 4 5O R D E N Ai j
Quick Sort
![Page 8: Métodos de Ordenação Eficiente · 2019-11-29 · Cabe ressaltar que há outros métodos de ordenação interessantes que não foram abordados nesta disciplina. Por exemplo, o método](https://reader034.vdocuments.net/reader034/viewer/2022043010/5fa07d38e1221f411d3e9609/html5/thumbnails/8.jpg)
8
◻ Passo 4: troque v[i] com v[j].
◻ Passo 5: incremente o valor de i e decremente o valor de j.
◻ Continue o processo (passos 2 à 5) até que os índices i e j se cruzem.
0 1 2 3 4 5A R D E N Oi j
0 1 2 3 4 5A R D E N O
i j
Quick Sort
![Page 9: Métodos de Ordenação Eficiente · 2019-11-29 · Cabe ressaltar que há outros métodos de ordenação interessantes que não foram abordados nesta disciplina. Por exemplo, o método](https://reader034.vdocuments.net/reader034/viewer/2022043010/5fa07d38e1221f411d3e9609/html5/thumbnails/9.jpg)
9
◻ Passos 2 e 3: percorra o vetor a partir da esquerda até que v[i] x≥ . Percorra o vetor a partir da direita até que v[j] x≤ .
0 1 2 3 4 5A R D E N O
i j
Quick Sort
0 1 2 3 4 5A R D E N O
i j
![Page 10: Métodos de Ordenação Eficiente · 2019-11-29 · Cabe ressaltar que há outros métodos de ordenação interessantes que não foram abordados nesta disciplina. Por exemplo, o método](https://reader034.vdocuments.net/reader034/viewer/2022043010/5fa07d38e1221f411d3e9609/html5/thumbnails/10.jpg)
10
◻ Passo 4 e 5: troque v[i] com v[j]. Incremente o valor de i e decremente o valor de j.
Quick Sort
0 1 2 3 4 5A D R E N O
i j
0 1 2 3 4 5A D R E N O
j i
![Page 11: Métodos de Ordenação Eficiente · 2019-11-29 · Cabe ressaltar que há outros métodos de ordenação interessantes que não foram abordados nesta disciplina. Por exemplo, o método](https://reader034.vdocuments.net/reader034/viewer/2022043010/5fa07d38e1221f411d3e9609/html5/thumbnails/11.jpg)
11
◻ Como os índices i e j se cruzaram, o algoritmo de partição termina.
◻ Observe que:◻ os elementos de v[0] até v[j] são menores ou iguais
ao pivô; e◻ os elementos de v[i] até v[5] são maiores ou iguais ao
pivô.
0 1 2 3 4 5A D R E N O
j i
Quick Sort
![Page 12: Métodos de Ordenação Eficiente · 2019-11-29 · Cabe ressaltar que há outros métodos de ordenação interessantes que não foram abordados nesta disciplina. Por exemplo, o método](https://reader034.vdocuments.net/reader034/viewer/2022043010/5fa07d38e1221f411d3e9609/html5/thumbnails/12.jpg)
12
◻ Após obter as duas “partes” do vetor por meio do particionamento, o processo é repetido para cada parte, recursivamente.
0 1 2 3 4 5A D R E N Oi j i j
0 1 2 3 4 5A D R E N O
j i
Quick Sort
![Page 13: Métodos de Ordenação Eficiente · 2019-11-29 · Cabe ressaltar que há outros métodos de ordenação interessantes que não foram abordados nesta disciplina. Por exemplo, o método](https://reader034.vdocuments.net/reader034/viewer/2022043010/5fa07d38e1221f411d3e9609/html5/thumbnails/13.jpg)
13
0 1 2 3 4 5A D R E N Oi j i j
0 1 2 3 4 5A D R E N O
j i i j2 3 4 5R E N Oi j2 3 4 5R E N Oi j2 3 4 5E R N Oj i
Partição
Partição
Quick Sort
![Page 14: Métodos de Ordenação Eficiente · 2019-11-29 · Cabe ressaltar que há outros métodos de ordenação interessantes que não foram abordados nesta disciplina. Por exemplo, o método](https://reader034.vdocuments.net/reader034/viewer/2022043010/5fa07d38e1221f411d3e9609/html5/thumbnails/14.jpg)
14
0 1 2 3 4 5A D E R N O
j i j i3 4 5R N Oi j
Partição
3 4 5R N Oi j3 4 5N R Oj i
Não precisa particionar, pois só resta um elemento
em cada subvetor
Quick Sort
![Page 15: Métodos de Ordenação Eficiente · 2019-11-29 · Cabe ressaltar que há outros métodos de ordenação interessantes que não foram abordados nesta disciplina. Por exemplo, o método](https://reader034.vdocuments.net/reader034/viewer/2022043010/5fa07d38e1221f411d3e9609/html5/thumbnails/15.jpg)
15
3 4 5N R Oj i
4 5R Oi j
Não precisa particionar, pois só resta um elemento
em cada subvetor
4 5O Rj i
Partição
Quick Sort
Não precisa particionar, pois só resta um elemento
em cada subvetor
![Page 16: Métodos de Ordenação Eficiente · 2019-11-29 · Cabe ressaltar que há outros métodos de ordenação interessantes que não foram abordados nesta disciplina. Por exemplo, o método](https://reader034.vdocuments.net/reader034/viewer/2022043010/5fa07d38e1221f411d3e9609/html5/thumbnails/16.jpg)
16
◻ Juntando as partes, o vetor ficou assim:
◻ Então, a ideia da ordenação é:⬜Dividir o vetor maior em dois vetores menores, um
vai de esq até j e o outro de i até dir.⬜Se os vetores menores possuírem, pelo menos, dois
elementos, chama-se algoritmo de partição recursivamente e o processo se repete até que todo vetor maior esteja ordenado.
4 5O R
3N
2E
0 1A D
Quick Sort
![Page 17: Métodos de Ordenação Eficiente · 2019-11-29 · Cabe ressaltar que há outros métodos de ordenação interessantes que não foram abordados nesta disciplina. Por exemplo, o método](https://reader034.vdocuments.net/reader034/viewer/2022043010/5fa07d38e1221f411d3e9609/html5/thumbnails/17.jpg)
17
void particiona(int v[], int esq, int dir) { int i = esq; int j = dir; int pivo = v[((i + j) / 2)]; do {
while (v[i] < pivo)i++;
while (v[j] > pivo)j--;
if (i <= j) {int aux = v[i];v[i] = v[j];v[j] = aux;i++; j--;
} } while (i <= j);
if (esq < j) particiona(v, esq, j); if (i < dir) particiona(v, i, dir);
}
void particiona(int v[], int esq, int dir) { int i = esq; int j = dir; int pivo = v[((i + j) / 2)]; do {
while (v[i] < pivo)i++;
while (v[j] > pivo)j--;
if (i <= j) {int aux = v[i];v[i] = v[j];v[j] = aux;i++; j--;
} } while (i <= j);
if (esq < j) particiona(v, esq, j); if (i < dir) particiona(v, i, dir);
}
Quick Sort
![Page 18: Métodos de Ordenação Eficiente · 2019-11-29 · Cabe ressaltar que há outros métodos de ordenação interessantes que não foram abordados nesta disciplina. Por exemplo, o método](https://reader034.vdocuments.net/reader034/viewer/2022043010/5fa07d38e1221f411d3e9609/html5/thumbnails/18.jpg)
18
◻ Para invocar o Quick Sort a partir da função main, faz-se:
void quickSort(int v[], int n) {particiona(v, 0, n - 1);
}
int main() {int TAM = 10;int v[] = {5, 3, 2, 2, 1, 6, 5, 7, 9, 10};quickSort(v, TAM);return EXIT_SUCCESS;
}
void quickSort(int v[], int n) {particiona(v, 0, n - 1);
}
int main() {int TAM = 10;int v[] = {5, 3, 2, 2, 1, 6, 5, 7, 9, 10};quickSort(v, TAM);return EXIT_SUCCESS;
}
Quick Sort
![Page 19: Métodos de Ordenação Eficiente · 2019-11-29 · Cabe ressaltar que há outros métodos de ordenação interessantes que não foram abordados nesta disciplina. Por exemplo, o método](https://reader034.vdocuments.net/reader034/viewer/2022043010/5fa07d38e1221f411d3e9609/html5/thumbnails/19.jpg)
19
◻Vantagens:
⬜É extremamente eficiente para ordenar grandes arquivos de dados.
⬜Necessita apenas de uma pequena pilha como memória auxiliar.
⬜Requer cerca de nlgn comparações em média para ordenar n itens.
Quick Sort
![Page 20: Métodos de Ordenação Eficiente · 2019-11-29 · Cabe ressaltar que há outros métodos de ordenação interessantes que não foram abordados nesta disciplina. Por exemplo, o método](https://reader034.vdocuments.net/reader034/viewer/2022043010/5fa07d38e1221f411d3e9609/html5/thumbnails/20.jpg)
20
◻Desvantagens:
⬜Tem um pior caso de n2 comparações.
⬜Sua implementação é delicada e difícil se comparada a dos métodos simples.
Quick Sort
![Page 21: Métodos de Ordenação Eficiente · 2019-11-29 · Cabe ressaltar que há outros métodos de ordenação interessantes que não foram abordados nesta disciplina. Por exemplo, o método](https://reader034.vdocuments.net/reader034/viewer/2022043010/5fa07d38e1221f411d3e9609/html5/thumbnails/21.jpg)
21
◻Outro algoritmo eficiente para ordenação é o Merge Sort, desenvolvido por John von Neumann.
◻É considerado um dos primeiros métodos de ordenação inventados.
Merge Sort
![Page 22: Métodos de Ordenação Eficiente · 2019-11-29 · Cabe ressaltar que há outros métodos de ordenação interessantes que não foram abordados nesta disciplina. Por exemplo, o método](https://reader034.vdocuments.net/reader034/viewer/2022043010/5fa07d38e1221f411d3e9609/html5/thumbnails/22.jpg)
22
◻A propriedade mais atrativa deste método de ordenação é que ele é capaz de ordenar um vetor qualquer de n de elementos em um tempo proporcional a nlgn.
◻ Isto é, não importa a maneira como os elementos estão organizados no vetor, sua complexidade será sempre a mesma.
Merge Sort
![Page 23: Métodos de Ordenação Eficiente · 2019-11-29 · Cabe ressaltar que há outros métodos de ordenação interessantes que não foram abordados nesta disciplina. Por exemplo, o método](https://reader034.vdocuments.net/reader034/viewer/2022043010/5fa07d38e1221f411d3e9609/html5/thumbnails/23.jpg)
23
◻Uma das desvantagens deste método, entretanto, é que ele requer espaço extra de memória proporcional a n.
◻Assim, Merge Sort é ideal para aplicações que precisam de ordenação eficiente, que não toleram desempenho ruim no pior caso e que possuam espaço de memória extra disponível.
Merge Sort
![Page 24: Métodos de Ordenação Eficiente · 2019-11-29 · Cabe ressaltar que há outros métodos de ordenação interessantes que não foram abordados nesta disciplina. Por exemplo, o método](https://reader034.vdocuments.net/reader034/viewer/2022043010/5fa07d38e1221f411d3e9609/html5/thumbnails/24.jpg)
24
◻O processo-chave do Merge Sort consiste em dividir o vetor original em subvetores cada vez menores até que se tenha pequenos subvetores com um elemento apenas.
◻A partir daí, cada par de subvetores é fundido (merged) de forma intercalada até se obter um único vetor ordenado com todos os elementos.
Merge Sort
![Page 25: Métodos de Ordenação Eficiente · 2019-11-29 · Cabe ressaltar que há outros métodos de ordenação interessantes que não foram abordados nesta disciplina. Por exemplo, o método](https://reader034.vdocuments.net/reader034/viewer/2022043010/5fa07d38e1221f411d3e9609/html5/thumbnails/25.jpg)
25
Merge Sort
![Page 26: Métodos de Ordenação Eficiente · 2019-11-29 · Cabe ressaltar que há outros métodos de ordenação interessantes que não foram abordados nesta disciplina. Por exemplo, o método](https://reader034.vdocuments.net/reader034/viewer/2022043010/5fa07d38e1221f411d3e9609/html5/thumbnails/26.jpg)
26
Merge Sort
![Page 27: Métodos de Ordenação Eficiente · 2019-11-29 · Cabe ressaltar que há outros métodos de ordenação interessantes que não foram abordados nesta disciplina. Por exemplo, o método](https://reader034.vdocuments.net/reader034/viewer/2022043010/5fa07d38e1221f411d3e9609/html5/thumbnails/27.jpg)
27
Merge Sort
![Page 28: Métodos de Ordenação Eficiente · 2019-11-29 · Cabe ressaltar que há outros métodos de ordenação interessantes que não foram abordados nesta disciplina. Por exemplo, o método](https://reader034.vdocuments.net/reader034/viewer/2022043010/5fa07d38e1221f411d3e9609/html5/thumbnails/28.jpg)
28
Merge Sort
![Page 29: Métodos de Ordenação Eficiente · 2019-11-29 · Cabe ressaltar que há outros métodos de ordenação interessantes que não foram abordados nesta disciplina. Por exemplo, o método](https://reader034.vdocuments.net/reader034/viewer/2022043010/5fa07d38e1221f411d3e9609/html5/thumbnails/29.jpg)
29
Merge Sort
![Page 30: Métodos de Ordenação Eficiente · 2019-11-29 · Cabe ressaltar que há outros métodos de ordenação interessantes que não foram abordados nesta disciplina. Por exemplo, o método](https://reader034.vdocuments.net/reader034/viewer/2022043010/5fa07d38e1221f411d3e9609/html5/thumbnails/30.jpg)
30
Merge Sort
![Page 31: Métodos de Ordenação Eficiente · 2019-11-29 · Cabe ressaltar que há outros métodos de ordenação interessantes que não foram abordados nesta disciplina. Por exemplo, o método](https://reader034.vdocuments.net/reader034/viewer/2022043010/5fa07d38e1221f411d3e9609/html5/thumbnails/31.jpg)
31
Merge Sort
![Page 32: Métodos de Ordenação Eficiente · 2019-11-29 · Cabe ressaltar que há outros métodos de ordenação interessantes que não foram abordados nesta disciplina. Por exemplo, o método](https://reader034.vdocuments.net/reader034/viewer/2022043010/5fa07d38e1221f411d3e9609/html5/thumbnails/32.jpg)
32
Merge Sort
![Page 33: Métodos de Ordenação Eficiente · 2019-11-29 · Cabe ressaltar que há outros métodos de ordenação interessantes que não foram abordados nesta disciplina. Por exemplo, o método](https://reader034.vdocuments.net/reader034/viewer/2022043010/5fa07d38e1221f411d3e9609/html5/thumbnails/33.jpg)
33
Merge Sort
![Page 34: Métodos de Ordenação Eficiente · 2019-11-29 · Cabe ressaltar que há outros métodos de ordenação interessantes que não foram abordados nesta disciplina. Por exemplo, o método](https://reader034.vdocuments.net/reader034/viewer/2022043010/5fa07d38e1221f411d3e9609/html5/thumbnails/34.jpg)
34
Merge Sort
![Page 35: Métodos de Ordenação Eficiente · 2019-11-29 · Cabe ressaltar que há outros métodos de ordenação interessantes que não foram abordados nesta disciplina. Por exemplo, o método](https://reader034.vdocuments.net/reader034/viewer/2022043010/5fa07d38e1221f411d3e9609/html5/thumbnails/35.jpg)
35
Merge Sort
![Page 36: Métodos de Ordenação Eficiente · 2019-11-29 · Cabe ressaltar que há outros métodos de ordenação interessantes que não foram abordados nesta disciplina. Por exemplo, o método](https://reader034.vdocuments.net/reader034/viewer/2022043010/5fa07d38e1221f411d3e9609/html5/thumbnails/36.jpg)
36
Merge Sort
![Page 37: Métodos de Ordenação Eficiente · 2019-11-29 · Cabe ressaltar que há outros métodos de ordenação interessantes que não foram abordados nesta disciplina. Por exemplo, o método](https://reader034.vdocuments.net/reader034/viewer/2022043010/5fa07d38e1221f411d3e9609/html5/thumbnails/37.jpg)
37
Merge Sort
![Page 38: Métodos de Ordenação Eficiente · 2019-11-29 · Cabe ressaltar que há outros métodos de ordenação interessantes que não foram abordados nesta disciplina. Por exemplo, o método](https://reader034.vdocuments.net/reader034/viewer/2022043010/5fa07d38e1221f411d3e9609/html5/thumbnails/38.jpg)
38
Merge Sort
![Page 39: Métodos de Ordenação Eficiente · 2019-11-29 · Cabe ressaltar que há outros métodos de ordenação interessantes que não foram abordados nesta disciplina. Por exemplo, o método](https://reader034.vdocuments.net/reader034/viewer/2022043010/5fa07d38e1221f411d3e9609/html5/thumbnails/39.jpg)
39
Merge Sort
![Page 40: Métodos de Ordenação Eficiente · 2019-11-29 · Cabe ressaltar que há outros métodos de ordenação interessantes que não foram abordados nesta disciplina. Por exemplo, o método](https://reader034.vdocuments.net/reader034/viewer/2022043010/5fa07d38e1221f411d3e9609/html5/thumbnails/40.jpg)
40
Merge Sort
![Page 41: Métodos de Ordenação Eficiente · 2019-11-29 · Cabe ressaltar que há outros métodos de ordenação interessantes que não foram abordados nesta disciplina. Por exemplo, o método](https://reader034.vdocuments.net/reader034/viewer/2022043010/5fa07d38e1221f411d3e9609/html5/thumbnails/41.jpg)
41
Merge Sort
![Page 42: Métodos de Ordenação Eficiente · 2019-11-29 · Cabe ressaltar que há outros métodos de ordenação interessantes que não foram abordados nesta disciplina. Por exemplo, o método](https://reader034.vdocuments.net/reader034/viewer/2022043010/5fa07d38e1221f411d3e9609/html5/thumbnails/42.jpg)
42
Merge Sort
![Page 43: Métodos de Ordenação Eficiente · 2019-11-29 · Cabe ressaltar que há outros métodos de ordenação interessantes que não foram abordados nesta disciplina. Por exemplo, o método](https://reader034.vdocuments.net/reader034/viewer/2022043010/5fa07d38e1221f411d3e9609/html5/thumbnails/43.jpg)
43
Merge Sort
![Page 44: Métodos de Ordenação Eficiente · 2019-11-29 · Cabe ressaltar que há outros métodos de ordenação interessantes que não foram abordados nesta disciplina. Por exemplo, o método](https://reader034.vdocuments.net/reader034/viewer/2022043010/5fa07d38e1221f411d3e9609/html5/thumbnails/44.jpg)
44
int *aux; // Variável globalvoid mergeSort(int v[], int n) { aux = new int[n]; mergesort(v, 0, n - 1); delete[] aux;}
int main() { int TAM = 10; int v[] = {5, 3, 2, 2, 1, 6, 5, 7, 9, 10}; mergeSort(v, TAM); return EXIT_SUCCESS;}
int *aux; // Variável globalvoid mergeSort(int v[], int n) { aux = new int[n]; mergesort(v, 0, n - 1); delete[] aux;}
int main() { int TAM = 10; int v[] = {5, 3, 2, 2, 1, 6, 5, 7, 9, 10}; mergeSort(v, TAM); return EXIT_SUCCESS;}
Merge Sort
![Page 45: Métodos de Ordenação Eficiente · 2019-11-29 · Cabe ressaltar que há outros métodos de ordenação interessantes que não foram abordados nesta disciplina. Por exemplo, o método](https://reader034.vdocuments.net/reader034/viewer/2022043010/5fa07d38e1221f411d3e9609/html5/thumbnails/45.jpg)
45
void mergesort(int v[], int esq, int dir) {if (esq < dir) {
int meio = (esq + dir) / 2;mergesort(v, esq, meio);mergesort(v, meio + 1, dir);intercala(v, esq, meio, dir);
}}
void mergesort(int v[], int esq, int dir) {if (esq < dir) {
int meio = (esq + dir) / 2;mergesort(v, esq, meio);mergesort(v, meio + 1, dir);intercala(v, esq, meio, dir);
}}
Merge Sort
![Page 46: Métodos de Ordenação Eficiente · 2019-11-29 · Cabe ressaltar que há outros métodos de ordenação interessantes que não foram abordados nesta disciplina. Por exemplo, o método](https://reader034.vdocuments.net/reader034/viewer/2022043010/5fa07d38e1221f411d3e9609/html5/thumbnails/46.jpg)
46void intercala(int v[], int esq, int meio, int dir) { int i, j; i=meio+1;
while(i>esq){ aux[i - 1] = v[i - 1]; i--;
}j=meio;while(j<dir){
aux[dir + meio - j] = v[j + 1]; j++;
} for(int k = esq; k <= dir; k++) { if (aux[j] < aux[i]) { v[k] = aux[j]; j--; } else { v[k] = aux[i]; i++; } }}
void intercala(int v[], int esq, int meio, int dir) { int i, j; i=meio+1;
while(i>esq){ aux[i - 1] = v[i - 1]; i--;
}j=meio;while(j<dir){
aux[dir + meio - j] = v[j + 1]; j++;
} for(int k = esq; k <= dir; k++) { if (aux[j] < aux[i]) { v[k] = aux[j]; j--; } else { v[k] = aux[i]; i++; } }}
Merge Sort
![Page 47: Métodos de Ordenação Eficiente · 2019-11-29 · Cabe ressaltar que há outros métodos de ordenação interessantes que não foram abordados nesta disciplina. Por exemplo, o método](https://reader034.vdocuments.net/reader034/viewer/2022043010/5fa07d38e1221f411d3e9609/html5/thumbnails/47.jpg)
47
◻ O número de comparações a serem realizadas pelo método de ordenação Merge Sort não depende de como os elementos estão organizados no vetor.
◻ Assim, para o pior caso, melhor caso e caso médio, a complexidade do Merge Sort é proporcional a nlgn.
Merge Sort
![Page 48: Métodos de Ordenação Eficiente · 2019-11-29 · Cabe ressaltar que há outros métodos de ordenação interessantes que não foram abordados nesta disciplina. Por exemplo, o método](https://reader034.vdocuments.net/reader034/viewer/2022043010/5fa07d38e1221f411d3e9609/html5/thumbnails/48.jpg)
48
◻As vantagens do Merge Sort são que ele é um método eficiente e não sensível à ordem em que os elementos aparecem no vetor.
◻A principal desvantagem deste método é que ele requer uma quantidade de espaço extra proporcional ao tamanho do vetor.
Merge Sort
![Page 49: Métodos de Ordenação Eficiente · 2019-11-29 · Cabe ressaltar que há outros métodos de ordenação interessantes que não foram abordados nesta disciplina. Por exemplo, o método](https://reader034.vdocuments.net/reader034/viewer/2022043010/5fa07d38e1221f411d3e9609/html5/thumbnails/49.jpg)
49
◻É responsabilidade do desenvolvedor saber decidir qual método de ordenação melhor atende às suas necessidades.
◻Para isso, ele precisa conhecer bem os detalhes do seu problema, bem com as características dos principais métodos de ordenação.
Considerações Finais
![Page 50: Métodos de Ordenação Eficiente · 2019-11-29 · Cabe ressaltar que há outros métodos de ordenação interessantes que não foram abordados nesta disciplina. Por exemplo, o método](https://reader034.vdocuments.net/reader034/viewer/2022043010/5fa07d38e1221f411d3e9609/html5/thumbnails/50.jpg)
50
◻Cabe ressaltar que há outros métodos de ordenação interessantes que não foram abordados nesta disciplina.
◻Por exemplo, o método de ordenação Heap Sort executa nlgn comparações no pior caso e também não é sensível à ordem inicial dos elementos do vetor de entrada.
Considerações Finais