classificação. 2 métodos de classificação os métodos de classificação podem ser dos tipos:...
TRANSCRIPT
![Page 1: Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar](https://reader031.vdocuments.site/reader031/viewer/2022012922/552fc10b497959413d8c1760/html5/thumbnails/1.jpg)
Classificação
![Page 2: Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar](https://reader031.vdocuments.site/reader031/viewer/2022012922/552fc10b497959413d8c1760/html5/thumbnails/2.jpg)
2
Métodos de Classificação
Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a
coleção de itens a classificar pode ficar armazenada em um “array” em memória
Classificação externa – quando as coleções de itens são muito grandes para poder permanecer armazenadas em memória
![Page 3: Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar](https://reader031.vdocuments.site/reader031/viewer/2022012922/552fc10b497959413d8c1760/html5/thumbnails/3.jpg)
3
Regiões classificada e não classificada
Os métodos são iterativos e nos “arrays” de registros aparecem duas regiões: a região já classificada e a região de registros ainda não classificados. Em cada iteração vai crescendo a região classificada. O processo se encerra quando a região classificada abrange todo o “array”.
![Page 4: Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar](https://reader031.vdocuments.site/reader031/viewer/2022012922/552fc10b497959413d8c1760/html5/thumbnails/4.jpg)
4
Métodos mais conhecidos
Os métodos mais conhecidos são: Classificação por troca Classificação por seleção Classificação por inserção
![Page 5: Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar](https://reader031.vdocuments.site/reader031/viewer/2022012922/552fc10b497959413d8c1760/html5/thumbnails/5.jpg)
5
Classificação por troca
Na classificação por troca comparam-se dois elementos do “array” verificando se a posição relativa do antecessor e do sucessor obedecem ao critério de classificação especificado. Caso haja obediência ao critério de classificação nada é feito. Em caso contrário trocam-se as posições destes registros. Exemplos: Bubble Sort Shake Sort Quick Sort
![Page 6: Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar](https://reader031.vdocuments.site/reader031/viewer/2022012922/552fc10b497959413d8c1760/html5/thumbnails/6.jpg)
6
Classificação por Inserção
Na classificação por inserção em cada instante toma-se um elemento, o elemento corrente, do trecho ainda não classificado do “array” e faz-se a inserção deste elemento na posição correta do trecho já classificado. Em conseqüência reduz-se o trecho ainda não classificado e amplia-se o trecho já classificado.Exemplos: Inserção Simples Shell Sort
![Page 7: Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar](https://reader031.vdocuments.site/reader031/viewer/2022012922/552fc10b497959413d8c1760/html5/thumbnails/7.jpg)
7
Exemplo de Inserção Simples
![Page 8: Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar](https://reader031.vdocuments.site/reader031/viewer/2022012922/552fc10b497959413d8c1760/html5/thumbnails/8.jpg)
8
Exemplo de Inserção Simples
![Page 9: Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar](https://reader031.vdocuments.site/reader031/viewer/2022012922/552fc10b497959413d8c1760/html5/thumbnails/9.jpg)
9
Exemplo de Inserção Simples
![Page 10: Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar](https://reader031.vdocuments.site/reader031/viewer/2022012922/552fc10b497959413d8c1760/html5/thumbnails/10.jpg)
10
Exemplo de Inserção Simples
![Page 11: Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar](https://reader031.vdocuments.site/reader031/viewer/2022012922/552fc10b497959413d8c1760/html5/thumbnails/11.jpg)
11
Exemplo de Inserção Simples
![Page 12: Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar](https://reader031.vdocuments.site/reader031/viewer/2022012922/552fc10b497959413d8c1760/html5/thumbnails/12.jpg)
12
Exemplo de Inserção Simples
![Page 13: Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar](https://reader031.vdocuments.site/reader031/viewer/2022012922/552fc10b497959413d8c1760/html5/thumbnails/13.jpg)
13
Exemplo de Inserção Simples
![Page 14: Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar](https://reader031.vdocuments.site/reader031/viewer/2022012922/552fc10b497959413d8c1760/html5/thumbnails/14.jpg)
14
Exemplo de Inserção Simples
![Page 15: Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar](https://reader031.vdocuments.site/reader031/viewer/2022012922/552fc10b497959413d8c1760/html5/thumbnails/15.jpg)
15
Exemplo de Inserção Simples
![Page 16: Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar](https://reader031.vdocuments.site/reader031/viewer/2022012922/552fc10b497959413d8c1760/html5/thumbnails/16.jpg)
16
Exemplo de Inserção Simples
![Page 17: Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar](https://reader031.vdocuments.site/reader031/viewer/2022012922/552fc10b497959413d8c1760/html5/thumbnails/17.jpg)
17
Exemplo de Inserção Simples
![Page 18: Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar](https://reader031.vdocuments.site/reader031/viewer/2022012922/552fc10b497959413d8c1760/html5/thumbnails/18.jpg)
18
Exemplo de Inserção Simples
![Page 19: Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar](https://reader031.vdocuments.site/reader031/viewer/2022012922/552fc10b497959413d8c1760/html5/thumbnails/19.jpg)
19
Classificação por Seleção
Na classificação por seleção, em cada instante seleciona-se do trecho ainda não classificado o elemento mais apropriado para ser acrescentado ao trecho já classificado. Em conseqüência reduz-se o trecho ainda não classificado e amplia-se o trecho já classificado.Exemplos: Seleção Direta Heap Sort
![Page 20: Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar](https://reader031.vdocuments.site/reader031/viewer/2022012922/552fc10b497959413d8c1760/html5/thumbnails/20.jpg)
20
Exemplo de Seleção Direta
![Page 21: Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar](https://reader031.vdocuments.site/reader031/viewer/2022012922/552fc10b497959413d8c1760/html5/thumbnails/21.jpg)
21
Exemplo de Seleção Direta
![Page 22: Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar](https://reader031.vdocuments.site/reader031/viewer/2022012922/552fc10b497959413d8c1760/html5/thumbnails/22.jpg)
22
Exemplo de Seleção Direta
![Page 23: Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar](https://reader031.vdocuments.site/reader031/viewer/2022012922/552fc10b497959413d8c1760/html5/thumbnails/23.jpg)
23
Exemplo de Seleção Direta
![Page 24: Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar](https://reader031.vdocuments.site/reader031/viewer/2022012922/552fc10b497959413d8c1760/html5/thumbnails/24.jpg)
24
Exemplo de Seleção Direta
![Page 25: Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar](https://reader031.vdocuments.site/reader031/viewer/2022012922/552fc10b497959413d8c1760/html5/thumbnails/25.jpg)
25
Exemplo de Seleção Direta
![Page 26: Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar](https://reader031.vdocuments.site/reader031/viewer/2022012922/552fc10b497959413d8c1760/html5/thumbnails/26.jpg)
26
Exemplo de Seleção Direta
![Page 27: Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar](https://reader031.vdocuments.site/reader031/viewer/2022012922/552fc10b497959413d8c1760/html5/thumbnails/27.jpg)
27
Exemplo de Seleção Direta
![Page 28: Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar](https://reader031.vdocuments.site/reader031/viewer/2022012922/552fc10b497959413d8c1760/html5/thumbnails/28.jpg)
28
Exemplo de Seleção Direta
![Page 29: Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar](https://reader031.vdocuments.site/reader031/viewer/2022012922/552fc10b497959413d8c1760/html5/thumbnails/29.jpg)
29
Exemplo de Seleção Direta
![Page 30: Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar](https://reader031.vdocuments.site/reader031/viewer/2022012922/552fc10b497959413d8c1760/html5/thumbnails/30.jpg)
30
Exemplo de Seleção Direta
![Page 31: Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar](https://reader031.vdocuments.site/reader031/viewer/2022012922/552fc10b497959413d8c1760/html5/thumbnails/31.jpg)
31
Exemplo de Seleção Direta
![Page 32: Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar](https://reader031.vdocuments.site/reader031/viewer/2022012922/552fc10b497959413d8c1760/html5/thumbnails/32.jpg)
32
Exemplo de Quick Sort (1)
![Page 33: Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar](https://reader031.vdocuments.site/reader031/viewer/2022012922/552fc10b497959413d8c1760/html5/thumbnails/33.jpg)
33
Exemplo de Quick Sort (2)
Ponto de separação ( 90 + 30 ) / 2 = 60 Posição no “array” 0 1 2 3 4 5 6 7 8 9
Posição no novo“array”
0 1 2 3 4
A trocar no novo "array"
90 55 42 71 30
0 4 90 55 42 71 30 1 2 30 55 42 71 90 30 42 55 71 90
Ponto de separação (30+42)/2=36
Posição no “array” 0 1 2 3 4 5 6 7 8 9 Posição no
novo“array” 0 1
A trocar no novo "array"
30 42
30 42 Ponto de separação ( 55 + 90
)/2=72,5 Posição no “array” 0 1 2 3 4 5 6 7 8 9
Posição no novo“array”
0 1 2
A trocar no novo "array"
55 71 90
55 71 90 Ponto de separação 55
Posição no “array” 0 1 2 3 4 5 6 7 8 9 Posição no
novo“array” 0
A trocar no novo "array"
55
55 Ponto de separação (71+90)/2=80,5
Posição no “array” 0 1 2 3 4 5 6 7 8 9 Posição no
novo“array” 0 1
A trocar no novo "array"
71 90
71 90
Resultado obtido "array"classificado 7 8 11 13 20 30 42 55 71 90
![Page 34: Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar](https://reader031.vdocuments.site/reader031/viewer/2022012922/552fc10b497959413d8c1760/html5/thumbnails/34.jpg)
34
Exemplo de “Shell Sort” (1)
![Page 35: Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar](https://reader031.vdocuments.site/reader031/viewer/2022012922/552fc10b497959413d8c1760/html5/thumbnails/35.jpg)
35
Exemplo de “Shell Sort” (2)
![Page 36: Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar](https://reader031.vdocuments.site/reader031/viewer/2022012922/552fc10b497959413d8c1760/html5/thumbnails/36.jpg)
36
Exemplo de “Shell Sort” (3)
![Page 37: Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar](https://reader031.vdocuments.site/reader031/viewer/2022012922/552fc10b497959413d8c1760/html5/thumbnails/37.jpg)
37
Critérios de Opção
Sugestão
Uma regra simples, que deve ser reavaliada em casos mais sensíveis, consiste em se utilizar: Inserção simples para “arrays” com até 30
registros; “Quick Sort” para “arrays” com mais de 30
registros.
![Page 38: Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar](https://reader031.vdocuments.site/reader031/viewer/2022012922/552fc10b497959413d8c1760/html5/thumbnails/38.jpg)
38
Hierarquia de classes para a classificação interna
![Page 39: Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar](https://reader031.vdocuments.site/reader031/viewer/2022012922/552fc10b497959413d8c1760/html5/thumbnails/39.jpg)
39
Interface Sorter
// pgm15_01.java
public interface Sorter
{
void sort (Comparable[]array);
}
![Page 40: Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar](https://reader031.vdocuments.site/reader031/viewer/2022012922/552fc10b497959413d8c1760/html5/thumbnails/40.jpg)
40
A Classe Abstrata AbstractSorter (1)
// pgm15_02.javapublic abstract class AbstractSorter implements Sorter{ protected Comparable[] array; protected int n;
protected abstract void sort();
![Page 41: Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar](https://reader031.vdocuments.site/reader031/viewer/2022012922/552fc10b497959413d8c1760/html5/thumbnails/41.jpg)
41
A Classe Abstrata AbstractSorter (2)
public final void sort (Comparable[] array) {
n = array.length; this.array = array; if(n > 0)
sort(); this.array = null;
}
protected final void swap(int i, int j) {
Comparable tmp = array[i]; array[i] = array[j]; array[j] = tmp;
}}
![Page 42: Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar](https://reader031.vdocuments.site/reader031/viewer/2022012922/552fc10b497959413d8c1760/html5/thumbnails/42.jpg)
42
Insertion Sorting
![Page 43: Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar](https://reader031.vdocuments.site/reader031/viewer/2022012922/552fc10b497959413d8c1760/html5/thumbnails/43.jpg)
43
A Classe StraightInsertionSorter
// pgm15_03.javapublic class StraightInsertionSorter extends AbstractSorter{ protected void sort() {
for(int i = 1; i < n; ++i)for(int j = i; j > 0 && array[j -
1].isGT (array [j]); --j)
{swap(j, j - 1);
} }}
![Page 44: Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar](https://reader031.vdocuments.site/reader031/viewer/2022012922/552fc10b497959413d8c1760/html5/thumbnails/44.jpg)
44
A Classe BinaryInsertionSorter (1)
// pgm15_04.javapublic class BinaryInsertionSorter extends AbstractSorter{ protected void sort() {
for(int i = 1; i < n; ++i) {
Comparable tmp = array[i]; int left = 0; int right = i;
![Page 45: Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar](https://reader031.vdocuments.site/reader031/viewer/2022012922/552fc10b497959413d8c1760/html5/thumbnails/45.jpg)
45
A Classe BinaryInsertionSorter (2)
while(left < right) {
int middle = (left + right) / 2; if(tmp.isGE(array[middle])) left = middle + 1; else right = middle;
} for(int j = i; j > left; --j)
swap (j - 1, j); }
}}
![Page 46: Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar](https://reader031.vdocuments.site/reader031/viewer/2022012922/552fc10b497959413d8c1760/html5/thumbnails/46.jpg)
46
Bublesort
![Page 47: Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar](https://reader031.vdocuments.site/reader031/viewer/2022012922/552fc10b497959413d8c1760/html5/thumbnails/47.jpg)
47
A Classe BubbleSorter
// pgm15_05.javapublic class BubbleSorter extends AbstractSorter{ protected void sort() {
for(int i = n; i > 1; --i) for(int j = 0; j < i - 1; ++j)
if(array[j].isGT(array[j + 1])) swap(j, j + 1);
}}
![Page 48: Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar](https://reader031.vdocuments.site/reader031/viewer/2022012922/552fc10b497959413d8c1760/html5/thumbnails/48.jpg)
48
QuickSort
![Page 49: Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar](https://reader031.vdocuments.site/reader031/viewer/2022012922/552fc10b497959413d8c1760/html5/thumbnails/49.jpg)
49
A Classe Abstrata AbstractQuickSorter (1)
// pgm15_06.javapublic abstract class AbstractQuickSorter extends AbstractSorter{ protected static final int cutOff = 2; // minimum cut-off
protected abstract int selectPivot(int left, int right); // ...}
![Page 50: Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar](https://reader031.vdocuments.site/reader031/viewer/2022012922/552fc10b497959413d8c1760/html5/thumbnails/50.jpg)
50
A Classe Abstrata AbstractQuickSorter (2)
// pgm15_07.javapublic abstract class AbstractQuickSorter extends AbstractSorter{ protected void sort(int left, int right) {
if(right - left + 1 > cutOff) {
int p = selectPivot(left, right); swap(p, right); Comparable pivot = array[right]; int i = left; int j = right - 1;
![Page 51: Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar](https://reader031.vdocuments.site/reader031/viewer/2022012922/552fc10b497959413d8c1760/html5/thumbnails/51.jpg)
51
A Classe Abstrata AbstractQuickSorter (3)
for(;;) {
while(i < j && array[i].isLT(pivot)) ++i; while(i < j && array[j].isGT(pivot)) --j; if(i >= j) break;
swap(i++, j--); } if(array[i].isGT(pivot))
swap(i, right); if(left < i)
sort(left, i - 1); if(right > i)
sort(i + 1, right); }
} // ...}
![Page 52: Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar](https://reader031.vdocuments.site/reader031/viewer/2022012922/552fc10b497959413d8c1760/html5/thumbnails/52.jpg)
52
A Classe Abstrata AbstractQuickSorter (4)
// pgm15_08.javapublic abstract class AbstractQuickSorter extends AbstractSorter{ protected void sort() {
sort(0, n - 1); Sorter sorter = new
StraightInsertionSorter(); sorter.sort(array);
} // ...}
![Page 53: Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar](https://reader031.vdocuments.site/reader031/viewer/2022012922/552fc10b497959413d8c1760/html5/thumbnails/53.jpg)
53
A Classe MedianOfThreeQuickSorter
// pgm15_09.javapublic class MedianOfThreeQuickSorter extends AbstractQuickSorter{ protected int selectPivot(int left, int right) {
int middle = (left + right) / 2; if (array[left].isGT(array[middle]))
swap(left, middle); if(array[left].isGT(array[right]))
swap(left, right); if(array[middle].isGT(array[right]))
swap(middle, right); return middle;
}}
![Page 54: Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar](https://reader031.vdocuments.site/reader031/viewer/2022012922/552fc10b497959413d8c1760/html5/thumbnails/54.jpg)
54
StraightSelectionSort
![Page 55: Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar](https://reader031.vdocuments.site/reader031/viewer/2022012922/552fc10b497959413d8c1760/html5/thumbnails/55.jpg)
55
A Classe StraightSelectionSorter
// pgm15_10.javapublic class StraightSelectionSorter extends AbstractSorter{ protected void sort() {
for(int i = n; i > 1; --i) {
int max = 0; for(int j = 1; j < i; ++j)
if(array[j].isGT(array[max])) max = j;
swap(i - 1, max); }
}}
![Page 56: Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar](https://reader031.vdocuments.site/reader031/viewer/2022012922/552fc10b497959413d8c1760/html5/thumbnails/56.jpg)
56
HeapSort
![Page 57: Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar](https://reader031.vdocuments.site/reader031/viewer/2022012922/552fc10b497959413d8c1760/html5/thumbnails/57.jpg)
57
Construção de um Heap
![Page 58: Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar](https://reader031.vdocuments.site/reader031/viewer/2022012922/552fc10b497959413d8c1760/html5/thumbnails/58.jpg)
58
Heap Sorting
![Page 59: Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar](https://reader031.vdocuments.site/reader031/viewer/2022012922/552fc10b497959413d8c1760/html5/thumbnails/59.jpg)
59
A classe HeapSorter (1)
// pgm15_11.javapublic class HeapSorter extends AbstractSorter{ protected static final int base = 1;
protected void percolateDown(int i, int length) {
while(2 * i <= length) {
int j = 2 * i; if( j < length &&
array[j + 1 - base].isGT(array[j - base]) )
![Page 60: Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar](https://reader031.vdocuments.site/reader031/viewer/2022012922/552fc10b497959413d8c1760/html5/thumbnails/60.jpg)
60
A classe HeapSorter (2)
j = j + 1; if(array[i - base].isGE(array[j - base]))
break; swap(i - base, j - base); i = j;
} } // ...}
![Page 61: Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar](https://reader031.vdocuments.site/reader031/viewer/2022012922/552fc10b497959413d8c1760/html5/thumbnails/61.jpg)
61
A classe HeapSorter (3)
// pgm15_12.javapublic class HeapSorter extends AbstractSorter{ protected static final int base = 1;
protected void buildHeap() {
for(int i = n / 2; i > 0; --i) percolateDown (i, n);
} // ...}
![Page 62: Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar](https://reader031.vdocuments.site/reader031/viewer/2022012922/552fc10b497959413d8c1760/html5/thumbnails/62.jpg)
62
A classe HeapSorter (4)
// pgm15_13.javapublic class HeapSorter extends AbstractSorter{ protected static final int base = 1;
protected void sort() {
buildHeap(); for(int i = n; i >= 2; --i) { swap(i - base, 1 - base); percolateDown(1, i - 1); }
} // ...}
![Page 63: Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar](https://reader031.vdocuments.site/reader031/viewer/2022012922/552fc10b497959413d8c1760/html5/thumbnails/63.jpg)
63
Two Way Merging
![Page 64: Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar](https://reader031.vdocuments.site/reader031/viewer/2022012922/552fc10b497959413d8c1760/html5/thumbnails/64.jpg)
64
Two Way Merge Sorting
![Page 65: Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar](https://reader031.vdocuments.site/reader031/viewer/2022012922/552fc10b497959413d8c1760/html5/thumbnails/65.jpg)
65
A classe TwoWayMergeSorter (1)
// pgm15_14.java
public class TwoWayMergeSorter extends AbstractSorter{ Comparable[] tempArray;
// ...}
![Page 66: Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar](https://reader031.vdocuments.site/reader031/viewer/2022012922/552fc10b497959413d8c1760/html5/thumbnails/66.jpg)
66
A classe TwoWayMergeSorter (2)
// pgm15_15.javapublic class TwoWayMergeSorter extends AbstractSorter{ Comparable[] tempArray;
protected void merge(int left, int middle, int right) {
int i = left; int j = left; int k = middle + 1;
![Page 67: Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar](https://reader031.vdocuments.site/reader031/viewer/2022012922/552fc10b497959413d8c1760/html5/thumbnails/67.jpg)
67
A classe TwoWayMergeSorter (3)
while(j <= middle && k <= right) {
if(array[j].isLT(array[k])) tempArray[i++] = array[j++];
else tempArray[i++] = array[k++];
} while(j <= middle)
tempArray[i++] = array[j++]; for(i = left; i < k; ++i)
array[i] = tempArray[i]; } // ...}
![Page 68: Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar](https://reader031.vdocuments.site/reader031/viewer/2022012922/552fc10b497959413d8c1760/html5/thumbnails/68.jpg)
68
A classe TwoWayMergeSorter (4)
// pgm15_16.javapublic class TwoWayMergeSorter extends AbstractSorter{ Comparable[] tempArray;
protected void sort() {
tempArray = new Comparable[n]; sort(0, n - 1); tempArray = null;
}
![Page 69: Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar](https://reader031.vdocuments.site/reader031/viewer/2022012922/552fc10b497959413d8c1760/html5/thumbnails/69.jpg)
69
A classe TwoWayMergeSorter (5)
protected void sort (int left, int right) {
if(left < right) {
int middle = (left + right) / 2; sort(left, middle); sort(middle + 1, right); merge(left, middle, right);
} } // ...}
![Page 70: Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar](https://reader031.vdocuments.site/reader031/viewer/2022012922/552fc10b497959413d8c1760/html5/thumbnails/70.jpg)
70
Bucket Sorting
![Page 71: Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar](https://reader031.vdocuments.site/reader031/viewer/2022012922/552fc10b497959413d8c1760/html5/thumbnails/71.jpg)
71
A classe BucketSorter (1)
// pgm15_17.javapublic class BucketSorter extends AbstractSorter{ protected int m; protected int[] count;
public BucketSorter(int m) {
this.m = m; count = new int [m];
} protected void sort()
{ sort((Int[]) array); } // ...}
![Page 72: Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar](https://reader031.vdocuments.site/reader031/viewer/2022012922/552fc10b497959413d8c1760/html5/thumbnails/72.jpg)
72
A classe BucketSorter (2)// pgm15_18.javapublic class BucketSorter extends AbstractSorter{ protected int m; protected int[] count;
protected void sort(Int[] array) {
for(int i = 0; i < m; ++i) count[i] = 0;
for(int j = 0; j < n; ++j) ++count[array[j].intValue()];
for(int i = 0, j = 0; i < m; ++i) for( ; count[i] > 0; --count[i])
array[j++] = new Int(i); } // ...}
![Page 73: Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar](https://reader031.vdocuments.site/reader031/viewer/2022012922/552fc10b497959413d8c1760/html5/thumbnails/73.jpg)
73
Radix Sorting
![Page 74: Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar](https://reader031.vdocuments.site/reader031/viewer/2022012922/552fc10b497959413d8c1760/html5/thumbnails/74.jpg)
74
A classe RadixSorter (1)
// pgm15_19.javapublic class RadixSorter extends AbstractSorter{ protected static final int r = 8; // bits da raiz protected static final int R = 1 << r; // Raiz protected static final int p = (32 + r - 1) / r; // Int com 32 bits // p número de passagens para varrer um Int protected int[] count = new int [R];
protected void sort() { sort ((Int[]) array); }
// ...}
![Page 75: Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar](https://reader031.vdocuments.site/reader031/viewer/2022012922/552fc10b497959413d8c1760/html5/thumbnails/75.jpg)
75
A classe RadixSorter (2)
// pgm15_20.java
public class RadixSorter
extends AbstractSorter
{
protected void sort (Int[] array)
{
Int[] tempArray = new Int[n];
![Page 76: Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar](https://reader031.vdocuments.site/reader031/viewer/2022012922/552fc10b497959413d8c1760/html5/thumbnails/76.jpg)
76
A classe RadixSorter (3)
for(int i = 0; i < p; ++i) {
for(int j = 0; j < R; ++j) count[j] = 0;for(int k = 0; k < n; ++k){
// r * i é o número de dígitos argumento do right shift // R – 1 é a máscara para R = 10000, R - 1 = 1111 ++count[( array[k].intValue() >>> (r*i) ) & (R-1)];
tempArray[k] = array[k]; } int pos = 0; for(int j = 0; j < R; ++j) { int tmp = pos; pos += count[j]; count[j] = tmp; }
![Page 77: Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar](https://reader031.vdocuments.site/reader031/viewer/2022012922/552fc10b497959413d8c1760/html5/thumbnails/77.jpg)
77
A classe RadixSorter (4)
for(int k = 0; k < n; ++k) {
int j = ( tempArray[k].intValue() >>>
(r*i) ) & (R-1); array[count[j]++] = tempArray[k];
} }
} // ...}