Você está na página 1de 31

UPE – Caruaru – Sistemas de Informação

Disciplina: Estrutura de Dados e Arquivo


Prof.: Paulemir G. Campos

Classificação de Dados

12/09/21 EDA - Prof. Paulemir Campos 1


Conteúdo
 Classificação de Dados:
 Bubble-sort
 Quick-sort
 Heap-sort
 Merge-sort
 Aplicações

12/09/21 EDA - Prof. Paulemir Campos 2


Classificação de Dados: Introdução
 Conjunto Ordenado: Elementos dispostos sob
uma determinada ordem.
 Objetivos da Classificação:
 Facilitar a recuperação;
 Tornar mais eficiente o acesso aos dados.
 Tipos de Classificação:
 Interna: Todos os registros estão na memória
principal;
 Externa: Alguns registros podem estar em
dispositivos auxiliares de armazenamento.

12/09/21 EDA - Prof. Paulemir Campos 3


Classificação de Dados: Introdução
 Veremos quatro algoritmos de
classificação interna de dados:
 Classificação por Troca
 Algoritmo Bubble-sort
 Algoritmo Quick-sort
 Classificação por Seleção
 Algoritmo Heap-sort
 Classificação por Intercalação
 Algoritmo Merge-sort

12/09/21 EDA - Prof. Paulemir Campos 4


Classificação por Troca
 Método Bubble-Sort
 A cada passo, cada elemento de um vetor C
(vetor de chaves) é comparado com o seu
sucessor, sendo os dois trocados de posição
caso estejam fora de ordem;
 São executados passos sucessivos, até que
não ocorram trocas, estando assim o vetor
classificado.

12/09/21 EDA - Prof. Paulemir Campos 5


Classificação por Troca
 Método Bubble-Sort (Algoritmo)
BubbleSort(inteiro V[N], N){ /* FALSE -> 0 e TRUE -> 1 */
inteiro ordenado, j, temp
ordenado = FALSE
enquanto NÃO(ordenado) {
ordenado = TRUE
para j = 1 até (N-1) incremento 1 {
se V[j] > V[j+1] {
temp = V[j]
V[j] = V[j+1]
V[j+1] = temp
ordenado = FALSE}
}
}
}

12/09/21 EDA - Prof. Paulemir Campos 6


Classificação por Troca
 Método Bubble-Sort (Exemplo)
 Seja o conjunto X={14,21,30,7,56,28,24,33,47,50,32}.
Ordená-lo segundo o método Bubble-Sort.
Etapa 14 21 30 7 56 28 24 33 47 50 32

1 14 21 7 30 28 24 33 47 50 32 56
2 14 7 21 28 24 30 33 47 32 50 56
3 7 14 21 24 28 30 33 32 47 50 56
4 7 14 21 24 28 30 32 33 47 50 56
5 7 14 21 24 28 30 32 33 47 50 56

12/09/21 EDA - Prof. Paulemir Campos 7


Classificação por Troca
 Método Bubble-Sort (Observações)
 O seu princípio básico de funcionamento é
conduzir os maiores elementos para o fim
do vetor;
 É um algoritmo de ordenação bastante
simples;
 Complexidade de Tempo: O(n2).

12/09/21 EDA - Prof. Paulemir Campos 8


Classificação por Troca
 Método Quick-Sort
 Sejam X um conjunto com n elementos e p um elemento qualquer
de X, denominado pivot. O método consiste em:
1) particionar x em dois subconjuntos X1 e X2 de modo que:
• todo elemento de X1 seja menor ou igual a p
• todo elemento de X2 seja maior que p

Obs. p particiona o conjunto x de tal modo que todos os elementos de x1


são menores que qualquer elemento de x2
Exemplo. x={14,21,30,7,56,28,24,33,47,50,32}
para p = 30 x1={14, 21, 7, 28, 24, 30} e x2={56, 33, 47, 50, 32}
para p = 21 x1={14, 7, 21} e x2={30, 28, 24,56, 33, 47, 50, 32}

12/09/21 EDA - Prof. Paulemir Campos 9


Classificação por Troca
 Método Quick-Sort
2) classificar x1 e x2
3) realizar a união de x1 e x2, nessa ordem

Obs.: O passo 2 sugere que este método pode ser definido de


modo recursivo. Na prática, os subconjuntos x1 e x2 podem
permanecer fisicamente dentro de x. Assim, após a classificação
recursiva desses, o conjunto x estará classificado. Neste caso a
união dos subconjuntos não é necessária.

12/09/21 EDA - Prof. Paulemir Campos 10


Classificação por Troca
 Método Quick-Sort (Algoritmo)
QuickSort(inteiro x[N], min, max)
início
/* particionar o conjunto x da posição min até max sendo que */
/* o pivot ficará na posição j, min  j  max */
se (min  max) então
j = Particionar(x[N], min, max);
QuickSort(x[N], min, j-1);
QuickSort(x[N], j+1, max);
fim-se
fim

12/09/21 EDA - Prof. Paulemir Campos 11


Classificação por Troca
 Método Quick-Sort (Função Particionar)
inteiro Particionar(inteiro x[N], min, max)
início
inteiro pivot, down, up, temp;
pivot = x[min]; down = min; up = max;
enquanto (down < up) faça
enquanto ((x[down] <= pivot) E (down<up)) faça
down += 1; // sobe no vetor
fim-enquanto
enquanto (x[up] > pivot) faça
up -=1; // desce no vetor
fim-enquanto
12/09/21 EDA - Prof. Paulemir Campos 12
Classificação por Troca
 Método Quick-Sort (Função Particionar)
se (down < up) então // troca elementos do vetor x[N]
temp = x[down];
x[down] = x[up];
x[up] = temp;
fim-se
fim-enquanto
x[min]=x[up];
x[up]=pivot;
j = up;
retorne j;
fim
12/09/21 EDA - Prof. Paulemir Campos 13
Classificação por Troca
 Método Quick-Sort (Exemplo)
Seja x={14,21,30,7,56,28,24,33,47,50,32}.
Classificá-lo usando o método Quick-Sort.

Pivot 14 21 30 7 56 28 24 33 47 50 32

30 14 21 7 28 24 30 56 33 47 50 32
21 e 47 14 7 21 28 24 30 33 32 47 56 50
7, 24, 32 e 50 7 14 21 24 28 30 32 33 47 50 56
14, 28 e 33 7 14 21 24 28 30 32 33 47 50 56

12/09/21 EDA - Prof. Paulemir Campos 14


Classificação por Troca
 Método Quick-Sort (Observações)
 É o mais rápido e simples algoritmo de
ordenação;
 Usa o princípio de divide-e-conquista;
 Complexidades de Tempo
 Caso Médio: O(n . log n);
 Pior Caso (muito raro): O(n2).

12/09/21 EDA - Prof. Paulemir Campos 15


Classificação por Seleção
 Método Heap-Sort
 Utiliza a seleção em árvore binária para a
obtenção dos elementos do vetor C na
ordem desejada.
 Possui duas fases distintas:
 Construção da árvore binária heap com os
elementos do vetor C;
 Usa-se este heap construído para a seleção dos
elementos na ordem desejada.

12/09/21 EDA - Prof. Paulemir Campos 16


Classificação por Seleção
 Método Heap-Sort
Árvore Binária heap é um tipo de árvore
binária em que todos os descendentes de
cada nó são menores que seus nós
ascendentes.

12/09/21 EDA - Prof. Paulemir Campos 17


Classificação por Seleção
 Método Heap-Sort
Exemplo de uma Árvore Binária Heap

1 25

17 23
2 3

15 8 19 12
4 5 6 7

12/09/21 EDA - Prof. Paulemir Campos 18


Classificação por Seleção
 Método Heap-Sort (Exemplo)

Dado o V={15,17,12,25,8,19,23} obter usando uma árvore


binária tipo heap esses elementos em ordem crescente.
1. Obter a árvore binária heap equivalente ao vetor V.
1 15 1 15

17 12 25 23
2 3 2 3

25 8 19 23 17 8 19 12
4 5 6 7 5 6 7
4
12/09/21 EDA - Prof. Paulemir Campos 19
Classificação por Seleção
 Método Heap-Sort (Exemplo)

Dado o V={15,17,12,25,8,19,23} obter usando uma árvore


binária tipo heap esses elementos em ordem crescente.
1. Obter a árvore binária heap equivalente ao vetor V. (Continuação)
1 25 1 25

15 23 17 23
2 3 2 3

17 8 19 12 15 8 19 12
4 5 6 7 5 6 7
4
12/09/21 EDA - Prof. Paulemir Campos 20
Classificação por Seleção
 Método Heap-Sort (Exemplo)

Dado o V={15,17,12,25,8,19,23} obter usando uma árvore binária tipo heap


esses elementos em ordem crescente.
2. Ordenar em ordem crescente o vetor V usando a árvore binária heap obtida no
passo 1

1 25 1 23

17 23 17 19
2 3 2 3

15 8 19 12 15 8 12 25
4 5 6 7 5 6 7
4
12/09/21 EDA - Prof. Paulemir Campos 21
Classificação por Seleção
 Método Heap-Sort (Exemplo)

Dado o V={15,17,12,25,8,19,23} obter usando uma árvore binária tipo heap


esses elementos em ordem crescente.
2. Ordenar em ordem crescente o vetor V usando a árvore binária heap obtida no
passo 1 (continuação do passo 2)

1 19 1 17

17 12 15 12
2 3 2 3

15 8 23 25 8 19 23 25
4 5 6 7 5 6 7
4
12/09/21 EDA - Prof. Paulemir Campos 22
Classificação por Seleção
 Método Heap-Sort (Exemplo)

Dado o V={15,17,12,25,8,19,23} obter usando uma árvore binária tipo heap


esses elementos em ordem crescente.
2. Ordenar em ordem crescente o vetor V usando a árvore binária heap obtida no
passo 1 (continuação do passo 2)

1 15 1 12

8 12 8 15
2 3 2 3

17 19 23 25 17 19 23 25
4 5 6 7 5 6 7
4
12/09/21 EDA - Prof. Paulemir Campos 23
Classificação por Seleção
 Método Heap-Sort (Exemplo)

Dado o V={15,17,12,25,8,19,23} obter usando uma árvore binária tipo heap


esses elementos em ordem crescente.
2. Ordenar em ordem crescente o vetor V usando a árvore binária heap obtida no
passo 1 (continuação do passo 2)

1 8

12 15 V = {8, 12, 15, 17, 19, 23, 25}


2 3

17 19 23 25
5 6 7
4

12/09/21 EDA - Prof. Paulemir Campos 24


Classificação por Seleção
 Método Heap-Sort (Observações)
 É um algoritmo ótimo;
 Complexidade de Tempo: O(n . log n);
 Não requer espaço extra de memória;
 Na prática é um pouco mais lento do que o
Quick-Sort.

12/09/21 EDA - Prof. Paulemir Campos 25


Classificação por Intercalação
 Método Merge-Sort
 O princípio de funcionamento deste
algoritmo é o seguinte:
- dividir o vetor original em n sub-partes de
tamanho 1;
- intercalar os pares de sub-partes adjacentes, da
esquerda para a direita em ordem crescente;
- repetir o passo anterior até obter um único vetor
de tamanho n, que evidentemente estará
ordenado.
12/09/21 EDA - Prof. Paulemir Campos 26
Classificação por Intercalação
 Método Merge-Sort (Exemplo)

12/09/21 EDA - Prof. Paulemir Campos 27


Classificação por Intercalação
 Método Merge-Sort (Observações)
 Usa o princípio de divide-e-conquista;
 É um algoritmo ótimo;
 Complexidades de Tempo: O(n . log n);
 Desvantagem
 Requer espaço extra de memória do tamanho
do vetor original para uso temporário.
 Na prática é um pouco mais lento do que
o Quick-Sort.
12/09/21 EDA - Prof. Paulemir Campos 28
Classificação de Dados: Aplicações
 Os métodos de classificação interna
vistos nesta aula podem ser aplicados
para se obter uma ordenação de um
vetor de chave de uma determinada
tabela, desde de que essas chaves
sejam números inteiros.

12/09/21 EDA - Prof. Paulemir Campos 29


Referências

 Veloso, P. et al. Estrutura de Dados.


Rio de Janeiro: Editora Campus, 1996.

12/09/21 EDA - Prof. Paulemir Campos 30


Links Interessantes
 Bubble-Sort:
 http://www.iti.fh-
flensburg.de/lang/algorithmen/sortieren/networks/sortieren.htm#section3

 Quick-Sort:
 http://www.iti.fh-flensburg.de/lang/algorithmen/sortieren/quick/quicken.htm

 Heap-Sort:
 http://www.iti.fh-flensburg.de/lang/algorithmen/sortieren/heap/heapen.htm

 Merge-Sort:
 http://www.iti.fh-flensburg.de/lang/algorithmen/sortieren/merge/mergen.htm

12/09/21 EDA - Prof. Paulemir Campos 31

Você também pode gostar