Professional Documents
Culture Documents
Aula05 Ordenação Simples
Aula05 Ordenação Simples
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
3
O problema de ordenação
❏ Existem alguns métodos de ordenação propostos na
literatura
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
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
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