Anda di halaman 1dari 6

Anlise e desenho de algoritmos

Professora Simoni Rangel de Freitas Oliveira 1

Algoritmos de Ordenao Simples


(SelectionSort, InsertionSort, BubbleSort)

1. Introduo

Objetivo: Determinar a seqncia ordenada dos elementos de um vetor numrico.

Algumas consideraes:

O espao utilizado para a ordenao ser o prprio vetor.


Vamos estudar algoritmos de ordenao considerando como entrada um vetor de
inteiros.

2. Ordenao por Seleo

Idia bsica do algoritmo:

Selecione o menor elemento do vetor.


Troque esse elemento com o elemento da primeira posio do vetor.
Repita as duas operaes 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_Seleo (A[n] NUMRICO)

DECLARE i, j, t, m NUMRICO
1 PARA i 1 AT n -1 FAA
INICIO
2 mi
3 PARA j i+1 AT n FAA
INCIO
4 SE A[j]< A[m]
5 ENTO m j
FIM
6 t A[m]
7 A[m] A[i]
8 A[i] t
FIM
Anlise e desenho de algoritmos
Professora Simoni Rangel de Freitas Oliveira 2

Exemplo: Considere o vetor A representado na figura seguinte:

1 2 3 4 5
vetor A 23 24 21 20 22

Algoritmo Ord_Seleo sobre o vetor A:

a) No vetor A [1 ... n] o menor elemento selecionado armazenado em sua posio


correta, A[1].

i=1 2 3 4 5
23 24 21 20 22

b) No vetor A [2 ... n] o menor elemento selecionado armazenado em sua posio


correta, A[2].

1 i=2 3 4 5
20 24 21 23 22

c) No vetor A [3 ... n] o menor elemento selecionado armazenado em sua posio


correta, A[3].

1 2 i=3 4 5
20 21 24 23 22

d) No vetor A [4 ... n] o menor elemento selecionado e como j est em sua


posio correta no h troca com outro elemento do vetor.

1 2 3 i=4 5
20 21 22 23 24

Vetor ordenado A:

1 2 3 4 5
vetor A 20 21 22 23 24
Anlise e desenho de algoritmos
Professora Simoni Rangel de Freitas Oliveira 3

3. Ordenao por Insero

Idia bsica do algoritmo:

Compare a chave com os elementos sua esquerda e se encontrar um elemento


maior que a chave, faa o deslocamento deste para uma posio direita.
Insira a chave na posio correta sua esquerda, onde os elementos esto
ordenados.
Repita as duas operaes anteriores considerando novas chaves at que a ltima
chave seja inserida em sua posio correta.

Algoritmo:

SUB-ROTINA Ord_Insero (A[n] NUMRICO)

DECLARE inteiro i, j, chave NUMRICO


1 PARA i 2 at n FAA
INCIO
2 chave A[ i]
3 ji-1
4 ENQUANTO j > 0 e A[j] > chave FAA
INCIO
5 A[j+1] A[j]
6 jj-1
FIM
7 A[j+1] chave
FIM

Exemplo: Considere o vetor A representado na figura seguinte:

1 2 3 4 5
Vetor A 6 1 0 5 4

Algoritmo Ord_Insero sobre o vetor A:

a) O elemento 6 deslocado uma posio direita e o valor chave inserido na


posio A[1].

1 i=2 3 4 5
6 1=chave 0 5 4

b) Os elementos 6 e 1 so deslocados para a direita e o valor chave inserido na


posio A[1].

1 2 i=3 4 5
1 6 0=chave 5 4
Anlise e desenho de algoritmos
Professora Simoni Rangel de Freitas Oliveira 4

c) O elemento 6 deslocado uma posio direita e o valor chave inserido na


posio A[3].

1 2 3 i=4 5
0 1 6 5=chave 4

d) Os elementos 6 e 5 so deslocados para a direita e o valor chave inserido na


posio A[3].

1 2 3 4 i=5
0 1 5 6 4=chave

Vetor ordenado A:

1 2 3 4 5
vetor A 0 1 4 5 6

4. Ordenao por trocas

Idia bsica do algoritmo:

Compare o primeiro elemento com o segundo. Se estiverem desordenados, ento


efetue a troca de posio. Compare o segundo elemento com o terceiro e efetue a
troca de posio, se necessrio.
Repita a operao anterior at que o penltimo elemento seja comparado com o
ltimo. Ao final desta repetio o elemento de maior valor estar em sua posio
correta, a n-sima posio do vetor.
Continue a ordenao posicionando o segundo maior elemento, o terceiro maior
elemento,..., at que todo o vetor esteja ordenado.

Algoritmo:

SUB-ROTINA Ord_Trocas (A[n] NUMRICO)


DECLARE i, j NUMRICO
1 PARA i n AT 2 FAA - (Passo -1)
INCIO
2 PARA j 1 AT i-1 FAA
INCIO
3 SE A[j]> A[j+1]
4 ENTO Troca (A[j], A[j+1])
FIM
FIM
Anlise e desenho de algoritmos
Professora Simoni Rangel de Freitas Oliveira 5

Exemplo: Considere o vetor A representado na figura seguinte:

1 2 3 4 5 6
Vetor A 10 9 8 7 6 5

Algoritmo Ord_Trocas sobre o vetor A:

e) No vetor A [1 ... 6] o maior elemento trocado de posio at atingir a ltima


posio do vetor, A[6].

j=1 2 3 4 5 i=6
10 9 8 7 6 5

1 j=2 3 4 5 i=6
9 10 8 7 6 5

1 2 j=3 4 5 i=6
9 8 10 7 6 5

1 2 3 j=4 5 i=6
9 8 7 10 6 5

1 2 3 4 j=5 i=6
9 8 7 6 10 5

Final da primeira iterao


1 2 3 4 5 6
9 8 7 6 5 10

f) No vetor A [1 ... 5] o segundo maior elemento trocado de posio at atingir a


penltima posio do vetor, A[5].

j=1 2 3 4 i=5 6
9 8 7 6 5 10

1 j=2 3 4 i=5 6
8 9 7 6 5 10

1 2 j=3 4 i=5 6
8 7 9 6 5 10

1 2 3 j=4 i=5 6
8 7 6 9 5 10

Final da segunda iterao


1 2 3 4 5 6
8 7 6 5 9 10
Anlise e desenho de algoritmos
Professora Simoni Rangel de Freitas Oliveira 6

g) No vetor A [1 ... 4] o terceiro maior elemento trocado de posio at atingir a sua


posio correta no vetor, A[4].

j=1 2 3 i=4 5 6
8 7 6 5 9 10

1 j=2 3 i=4 5 6
7 8 6 5 9 10

1 2 j=3 i=4 5 6
7 6 8 5 9 10

Final da terceira iterao


1 2 3 4 5 6
7 6 5 8 9 10

h) No vetor A [1 ... 3] o quarto maior elemento trocado de posio at atingir a sua


posio correta no vetor, A[3].

j=1 2 i=3 4 5 6
7 6 5 8 9 10

1 i=2 i=3 4 5 6
6 7 5 8 9 10

Final da quarta iterao


1 2 3 4 5 6
6 5 7 8 9 10

i) No vetor A [1 ... 2] o quinto maior elemento trocado de posio at atingir a sua


posio correta no vetor, A[2].

j=1 i=2 3 4 5 6
6 5 7 8 9 10

Final da quinta iterao


1 2 3 4 5 6
5 6 7 8 9 10

Vetor ordenado A:

1 2 3 4 5 6
Vetor A 5 6 7 8 9 10

Bibliografia
ZIVIANI, N. Projeto de Algoritmos com Implementaes em Pascal e C
2a.Edio. Editora Thomson, So Paulo, 2004.
CORMEN, T. H. Algoritmos Teoria e Prtica. Editora Campus, Rio de Janeiro,
2002.
TOSCANI, L.V., VELOSO, P.A.S. Complexidade de Algortimos. Editora Sagra
Luzzatto, Porto Alegre, 2002.