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.