You are on page 1of 43

BCC702 - Programação de Computadores II

Métodos Simples de Ordenação


Profª Valéria de Carvalho Santos

1
O problema de ordenação
❏ A ordenação de dados tem considerável importância
para vários problemas
❏ Exemplo: localizar um número de telefone em uma
agenda. A busca é simplificada se o nomes estão
organizados em ordem alfabética

2
O problema de ordenação
❏ Ordenar: organizar uma sequência de elementos de
modo que eles estabeleçam alguma relação de ordem

❏ Um conjunto de dados ordenados ocasionalmente


facilita a busca/localização/recuperação de um
elemento

3
O problema de ordenação
❏ Existem alguns métodos de ordenação propostos na
literatura

❏ Dependendo do problema, um algoritmo apresenta


vantagens e/ou desvantagens sobre outros

4
Métodos simples de ordenação
❏ Ordenação por Seleção (Selection Sort)
❏ Ordenação por Inserção (Insertion Sort)

5
Ordenação por Seleção
❏ Funcionamento:
❏ Selecione o menor elemento do vetor;
❏ Troque-o com o elemento da primeira posição do
vetor;
❏ Repita essas duas operações para os n-1 elementos
restantes, depois para os n-2 elementos restantes,
até que reste apenas um elemento.

6
Exemplo
5 2 8 12 4 1
0 1 2 3 4 5

7
Exemplo procura o menor

5 2 8 12 4 1
0 1 2 3 4 5

8
Exemplo procura o menor

5 2 8 12 4 1 Troca o menor com


o primeiro elemento
0 1 2 3 4 5

9
Exemplo
1 2 8 12 4 5
0 1 2 3 4 5

10
Exemplo
1 2 8 12 4 5
0 1 2 3 4 5

1 2 8 12 4 5
0 1 2 3 4 5

11
Exemplo
5 2 8 12 4 1
0 1 2 3 4 5

1 2 8 12 4 5
0 1 2 3 4 5

1 2 8 12 4 5
0 1 2 3 4 5

12
Exemplo
5 2 8 12 4 1
0 1 2 3 4 5

1 2 8 12 4 5
0 1 2 3 4 5

1 2 4 12 8 5
0 1 2 3 4 5

13
Exemplo
5 2 8 12 4 1
0 1 2 3 4 5

1 2 8 12 4 5
0 1 2 3 4 5

1 2 4 12 8 5
0 1 2 3 4 5

1 2 4 12 8 5
0 1 2 3 4 5

14
Exemplo
5 2 8 12 4 1
0 1 2 3 4 5

1 2 8 12 4 5
0 1 2 3 4 5

1 2 4 12 8 5
0 1 2 3 4 5

1 2 4 12 8 5
0 1 2 3 4 5

15
Exemplo
5 2 8 12 4 1
0 1 2 3 4 5

1 2 8 12 4 5
0 1 2 3 4 5

1 2 4 12 8 5
0 1 2 3 4 5

1 2 4 5 8 12
0 1 2 3 4 5

16
Exemplo
5 2 8 12 4 1
0 1 2 3 4 5

1 2 8 12 4 5
0 1 2 3 4 5

1 2 4 12 8 5
0 1 2 3 4 5

1 2 4 5 8 12
0 1 2 3 4 5

1 2 4 5 8 12
0 1 2 3 4 5
17
Exemplo
5 2 8 12 4 1
0 1 2 3 4 5

1 2 8 12 4 5
0 1 2 3 4 5

1 2 4 12 8 5
0 1 2 3 4 5

1 2 4 5 8 12
0 1 2 3 4 5

1 2 4 5 8 12
0 1 2 3 4 5
18
void ordena_selecao(int A[], int n){
int min, aux;
for(int i=0; i<n; i++){
min = i;
for(int j = i+1; j<n; j++){
if(A[j] < A[min])
min = j;
}
aux = A[i];
A[i] = A[min];
A[min] = aux;
}
}
19
Ordenação por Seleção
❏ É um método simples e fácil de implementar

❏ É um método interessante para conjuntos pequenos de


elementos

❏ O fato de o conjunto já estar ordenado não melhora a


complexidade do algoritmo

20
Ordenação por Inserção
❏ É o método utilizado por jogadores de carta

21
Ordenação por Inserção
❏ Funcionamento:
❏ Em cada passo, a partir da segunda posição,
selecione o i-ésimo elemento do vetor
❏ coloque-o no lugar apropriado na sequência destino,
de acordo o critério de ordenação

22
Exemplo
5 2 8 12 4 9
0 1 2 3 4 5

23
Exemplo
aux 5 > 2?

2 5 2 8 12 4 9
0 1 2 3 4 5

24
Exemplo
aux

2 5 5 8 12 4 9
-1 0 1 2 3 4 5

25
Exemplo
aux

2 2 5 8 12 4 9
-1 0 1 2 3 4 5

26
Exemplo
2 5 8 12 4 9
0 1 2 3 4 5
aux 5 > 8?
8 2 5 8 12 4 9
0 1 2 3 4 5

27
Exemplo
2 5 8 12 4 9
0 1 2 3 4 5

2 5 8 12 4 9
0 1 2 3 4 5
aux 8 > 12?
12 2 5 8 12 4 9
0 1 2 3 4 5

28
Exemplo
2 5 8 12 4 9
0 1 2 3 4 5

2 5 8 12 4 9
0 1 2 3 4 5

2 5 8 12 4 9
0 1 2 3 4 5
aux 12 > 4?
4 2 5 8 12 4 9
0 1 2 3 4 5

29
Exemplo
2 5 8 12 4 9
0 1 2 3 4 5

2 5 8 12 4 9
0 1 2 3 4 5

2 5 8 12 4 9
0 1 2 3 4 5
aux

4 2 5 8 12 12 9
0 1 2 3 4 5

30
Exemplo
2 5 8 12 4 9
0 1 2 3 4 5

2 5 8 12 4 9
0 1 2 3 4 5

2 5 8 12 4 9
0 1 2 3 4 5
aux 8 > 4?
4 2 5 8 12 12 9
0 1 2 3 4 5

31
Exemplo
2 5 8 12 4 9
0 1 2 3 4 5

2 5 8 12 4 9
0 1 2 3 4 5

2 5 8 12 4 9
0 1 2 3 4 5
aux

4 2 5 8 8 12 9
0 1 2 3 4 5

32
Exemplo
2 5 8 12 4 9
0 1 2 3 4 5

2 5 8 12 4 9
0 1 2 3 4 5

2 5 8 12 4 9
0 1 2 3 4 5
aux 5 > 4?
4 2 5 8 8 12 9
0 1 2 3 4 5

33
Exemplo
2 5 8 12 4 9
0 1 2 3 4 5

2 5 8 12 4 9
0 1 2 3 4 5

2 5 8 12 4 9
0 1 2 3 4 5
aux

4 2 5 5 8 12 9
0 1 2 3 4 5

34
Exemplo
2 5 8 12 4 9
0 1 2 3 4 5

2 5 8 12 4 9
0 1 2 3 4 5

2 5 8 12 4 9
0 1 2 3 4 5
aux 2 > 4?
4 2 5 5 8 12 9
0 1 2 3 4 5

35
Exemplo
2 5 8 12 4 9
0 1 2 3 4 5

2 5 8 12 4 9
0 1 2 3 4 5

2 5 8 12 4 9
0 1 2 3 4 5
aux

4 2 4 5 8 12 9
0 1 2 3 4 5

36
Exemplo
2 5 8 12 4 9
0 1 2 3 4 5

2 5 8 12 4 9
0 1 2 3 4 5

2 5 8 12 4 9
0 1 2 3 4 5

2 4 5 8 12 9
0 1 2 3 4 5
aux 12 > 9?
9 2 4 5 8 12 9
0 1 2 3 4 5
37
Exemplo
2 5 8 12 4 9
0 1 2 3 4 5

2 5 8 12 4 9
0 1 2 3 4 5

2 5 8 12 4 9
0 1 2 3 4 5

2 4 5 8 12 9
0 1 2 3 4 5
aux

9 2 4 5 8 12 12
0 1 2 3 4 5
38
Exemplo
2 5 8 12 4 9
0 1 2 3 4 5

2 5 8 12 4 9
0 1 2 3 4 5

2 5 8 12 4 9
0 1 2 3 4 5

2 4 5 8 12 9
0 1 2 3 4 5
aux 8 > 9?
9 2 4 5 8 12 12
0 1 2 3 4 5
39
Exemplo
2 5 8 12 4 9
0 1 2 3 4 5

2 5 8 12 4 9
0 1 2 3 4 5

2 5 8 12 4 9
0 1 2 3 4 5

2 4 5 8 12 9
0 1 2 3 4 5
aux

9 2 4 5 8 9 12
0 1 2 3 4 5
40
Exemplo
2 5 8 12 4 9
0 1 2 3 4 5

2 5 8 12 4 9
0 1 2 3 4 5

2 5 8 12 4 9
0 1 2 3 4 5

2 4 5 8 12 9
0 1 2 3 4 5

2 4 5 8 9 12
0 1 2 3 4 5
41
void ordena_insercao(int A[], int n){
int min, aux, j;
for(int i=1; i<n; i++){
aux = A[i];
j = i-1;
while(j >= 0 && A[j] > aux){
A[j+1] = A[j];
j = j-1;
}
A[j+1] = aux;
}
}
42
Ordenação por Inserção
❏ É um bom método a ser utilizado quando:
❏ o vetor está quase ordenado
❏ possui um comportamento ruim quando o conjunto
de elementos está bastante desorganizado

43

You might also like