Algoritmos de Ordenação Simples

Propaganda
Análise e desenho de algoritmos
Professora Simoni Rangel de Freitas Oliveira
1
Algoritmos de Ordenação Simples
(SelectionSort, InsertionSort, BubbleSort)
1. Introdução
Objetivo: Determinar a seqüência ordenada dos elementos de um vetor numérico.
Algumas considerações:
•
•
O espaço utilizado para a ordenação será o próprio vetor.
Vamos estudar algoritmos de ordenação considerando como entrada um vetor de
inteiros.
2. Ordenação por Seleção
Idéia básica do algoritmo:
•
•
•
Selecione o menor elemento do vetor.
Troque esse elemento com o elemento da primeira posição do vetor.
Repita as duas operações anteriores considerando apenas os n - 1 elementos
restantes, em seguida repita com os n - 2 elementos restantes; e assim
sucessivamente até que reste apenas um elemento no vetor a ser considerado.
Algoritmo:
SUB-ROTINA Ord_Seleção (A[n] NUMÉRICO)
1
2
3
4
5
6
7
8
DECLARE i, j, t, m NUMÉRICO
PARA i ← 1 ATÉ n -1 FAÇA
INICIO
m←i
PARA j ← i+1 ATÉ n FAÇA
INÍCIO
SE A[j]< A[m]
ENTÃO m ← j
FIM
t ← A[m]
A[m] ← A[i]
A[i] ← t
FIM
2
Análise e desenho de algoritmos
Professora Simoni Rangel de Freitas Oliveira
Exemplo: Considere o vetor A representado na figura seguinte:
vetor A
1
23
2
24
3
21
4
20
5
22
Algoritmo Ord_Seleção sobre o vetor A:
a) No vetor A [1 ... n] o menor elemento é selecionado armazenado em sua posição
correta, A[1].
i=1
23
2
24
3
21
4
20
5
22
b) No vetor A [2 ... n] o menor elemento é selecionado armazenado em sua posição
correta, A[2].
1
20
i=2
24
3
21
4
23
5
22
c) No vetor A [3 ... n] o menor elemento é selecionado armazenado em sua posição
correta, A[3].
1
20
2
21
i=3
24
4
23
5
22
d) No vetor A [4 ... n] o menor elemento é selecionado e como já está em sua
posição correta não há troca com outro elemento do vetor.
1
20
2
21
3
22
i=4
23
5
24
Vetor ordenado A:
vetor A
1
20
2
21
3
22
4
23
5
24
3
Análise e desenho de algoritmos
Professora Simoni Rangel de Freitas Oliveira
3. Ordenação por Inserção
Idéia básica do algoritmo:
•
•
•
Compare a chave com os elementos à sua esquerda e se encontrar um elemento
maior que a chave, faça o deslocamento deste para uma posição à direita.
Insira a chave na posição correta à sua esquerda, onde os elementos estão
ordenados.
Repita as duas operações anteriores considerando novas chaves até que a última
chave seja inserida em sua posição correta.
Algoritmo:
SUB-ROTINA Ord_Inserção (A[n] NUMÉRICO)
1
2
3
4
5
6
7
DECLARE inteiro i, j, chave NUMÉRICO
PARA i ←2 até n FAÇA
INÍCIO
chave ←A[ i]
j←i-1
ENQUANTO j > 0 e A[j] > chave FAÇA
INÍCIO
A[j+1] ← A[j]
j←j-1
FIM
A[j+1] ← chave
FIM
Exemplo: Considere o vetor A representado na figura seguinte:
Vetor A
1
6
2
1
3
0
4
5
5
4
Algoritmo Ord_Inserção sobre o vetor A:
a) O elemento 6 é deslocado uma posição à direita e o valor chave é inserido na
posição A[1].
1
6
i=2
1=chave
3
0
4
5
5
4
b) Os elementos 6 e 1 são deslocados para a direita e o valor chave é inserido na
posição A[1].
1
1
2
6
i=3
0=chave
4
5
5
4
4
Análise e desenho de algoritmos
Professora Simoni Rangel de Freitas Oliveira
c) O elemento 6 é deslocado uma posição à direita e o valor chave é inserido na
posição A[3].
1
0
2
1
3
6
i=4
5=chave
5
4
d) Os elementos 6 e 5 são deslocados para a direita e o valor chave é inserido na
posição A[3].
1
0
2
1
3
5
4
6
i=5
4=chave
vetor A
1
0
2
1
3
4
4
5
Vetor ordenado A:
5
6
4. Ordenação por trocas
Idéia básica do algoritmo:
•
•
•
Compare o primeiro elemento com o segundo. Se estiverem desordenados, então
efetue a troca de posição. Compare o segundo elemento com o terceiro e efetue a
troca de posição, se necessário.
Repita a operação anterior até que o penúltimo elemento seja comparado com o
último. Ao final desta repetição o elemento de maior valor estará em sua posição
correta, a n-ésima posição do vetor.
Continue a ordenação posicionando o segundo maior elemento, o terceiro maior
elemento,..., até que todo o vetor esteja ordenado.
Algoritmo:
SUB-ROTINA Ord_Trocas (A[n] NUMÉRICO)
DECLARE i, j NUMÉRICO
1 PARA i ← n ATÉ 2 FAÇA - (Passo -1)
INÍCIO
2
PARA j ← 1 ATÉ i-1 FAÇA
INÍCIO
3
SE A[j]> A[j+1]
4
ENTÃO Troca (A[j], A[j+1])
FIM
FIM
5
Análise e desenho de algoritmos
Professora Simoni Rangel de Freitas Oliveira
Exemplo: Considere o vetor A representado na figura seguinte:
Vetor A
1
10
2
9
3
8
4
7
5
6
6
5
Algoritmo Ord_Trocas sobre o vetor A:
e) No vetor A [1 ... 6] o maior elemento é trocado de posição até atingir a última
posição do vetor, A[6].
f)
j=1
10
2
9
3
8
4
7
5
6
i=6
5
1
9
j=2
10
3
8
4
7
5
6
i=6
5
1
9
2
8
j=3
10
4
7
5
6
i=6
5
1
9
2
8
3
7
j=4
10
5
6
i=6
5
1
9
2
8
3
7
4
6
j=5
10
i=6
5
1
9
2
8
Final da primeira iteração
3
4
5
7
6
5
6
10
No vetor A [1 ... 5] o segundo maior elemento é trocado de posição até atingir a
penúltima posição do vetor, A[5].
j=1
9
2
8
3
7
4
6
i=5
5
6
10
1
8
j=2
9
3
7
4
6
i=5
5
6
10
1
8
2
7
j=3
9
4
6
i=5
5
6
10
1
8
2
7
3
6
j=4
9
i=5
5
6
10
1
8
Final da segunda iteração
2
3
4
5
7
6
5
9
6
10
6
Análise e desenho de algoritmos
Professora Simoni Rangel de Freitas Oliveira
g) No vetor A [1 ... 4] o terceiro maior elemento é trocado de posição até atingir a sua
posição correta no vetor, A[4].
j=1
8
2
7
3
6
i=4
5
5
9
6
10
1
7
j=2
8
3
6
i=4
5
5
9
6
10
1
7
2
6
j=3
8
i=4
5
5
9
6
10
1
7
2
6
Final da terceira iteração
3
4
5
5
8
9
6
10
h) No vetor A [1 ... 3] o quarto maior elemento é trocado de posição até atingir a sua
posição correta no vetor, A[3].
i)
j=1
7
2
6
i=3
5
4
8
5
9
6
10
1
6
i=2
7
i=3
5
4
8
5
9
6
10
1
6
2
5
Final da quarta iteração
3
4
5
7
8
9
6
10
No vetor A [1 ... 2] o quinto maior elemento é trocado de posição até atingir a sua
posição correta no vetor, A[2].
j=1
6
i=2
5
1
5
2
6
3
7
4
8
5
9
6
10
Final da quinta iteração
3
4
5
7
8
9
6
10
Vetor ordenado A:
Vetor A
1
5
2
6
3
7
4
8
5
9
6
10
Bibliografia
ZIVIANI, N. Projeto de Algoritmos com Implementações em Pascal e C –
2a.Edição. Editora Thomson, São Paulo, 2004.
CORMEN, T. H. Algoritmos – Teoria e Prática. Editora Campus, Rio de Janeiro,
2002.
TOSCANI, L.V., VELOSO, P.A.S. Complexidade de Algortimos. Editora Sagra
Luzzatto, Porto Alegre, 2002.
Download