SlideShare uma empresa Scribd logo
1 de 6
1. para i 1
até tamanho-1,
faça
2. minimo
i
3. para j
i+1 até
tamanho, faça
4. se
vetor[j] <
vetor[minimo],
então
5.
minimo j
6. fim-se
7. fim-par
8. temp
vetor[i]
9. vetor[i] vetor[minimo]
10. vetor[minimo] temp
11. fim-para
tamanho = comprimento do vetor
Funcionamento
A idéia é sempre procurar o menor elemento do vetor e inseri-lo no início do vetor.
Procuramos o menor valor do vetor e colocamos ele em vetor[1]. Procuramos o menor
valor do vetor excluindo o já colocado e colocamos ele em vetor[2]. E assim vamos
indo até termos todo o vetor ordenado.
Partindo sempre a partir do último elemento reordenado (a partir do i), o programa
procura o menor elemento no vetor e o substitue pelo elemento i atual.
Exemplo de Funcionamento
O programa recebe o seguinte vetor.
v[1] v[2] v[3] v[4] v[5] v[6]
5 3 7 8 2 5
Aí ele começa com . Vou sempre marcar com a cor preta e com a cor cinza.
v[1] v[2] v[3] v[4] v[5] v[6]
5 3 7 8 2 5
Ele marca o próprio índice i como a variável minimo, que é sempre o menor elemento
do vetor. Então, ele faz um para de até o comprimento do vetor, com o objetivo
de descobrir qual o menor elemento.
… ... , portanto não mexemos em nada.
... , portanto não mexemos em nada.
... ... , portanto não mexemos em nada.
Agora substituímos o v[minimo] pelo v[i], formando com isto o novo vetor:
v[1] v[2] v[3] v[4] v[5] v[6]
2 3 7 8 5 5
E assim vamos fazendo com os outros elementos até que todo o vetor esteja ordenado.
Custo
Este algoritmo não tem um melhor/pior caso, porque todos os elementos são varridos,
sempre. Medir seu custo é simples. Custo de linha por linha...
n = tamanho do vetor
1.
2.
3.
4.
5. ???
6.
7.
8.
9.
10.
11.
Você pode estar se perguntando porque eu coloquei este custo para a linha 5. Afinal, a
linha 5 diria que este programa tem um melhor/pior caso, porque ela não seria
executada se o se retornar falso. Mas o caso é que ela é desprezível. Uma soma como
estas para o custo geral do nosso algoritmo não vai influenciar em nada. Quer ver?
Vamos somar os custos com esta linha valendo (como se nenhum se entrasse) e depois
com ela valendo .
Selection Sort
Este algoritmo é baseado em se passar sempre o menor valor do vetor para a primeira
posição (ou o maior dependendo da ordem requerida), depois o segundo menor valor
para a segunda posição e assim sucessivamente, até os últimos dois elementos.
Neste algoritmo de ordenação é escolhido um número a partir do primeiro, este número
escolhido é comparado com os números a partir da sua direita, quando encontrado um
número menor, o número escolhido ocupa a posição do menor número encontrado. Este
número encontrado será o próximo número escolhido, caso não for encontrado nenhum
número menor que este escolhido, ele é colocado na posição do primeiro número
escolhido, e o próximo número à sua direita vai ser o escolhido para fazer as
comparações. É repetido esse processo até que a lista esteja ordenada.
Figura 3: Esquema de funcionamento do Selection Sort
• Neste passo o primeiro número escolhido foi o 3, ele foi comparado com todos
os números à sua direita e o menor número encontrado foi o 1, então os dois
trocam de lugar.
• O mesmo processo do passo 1 acontece, o número escolhido foi o 5 e o menor
número encontrado foi o 2.
• Não foi encontrado nenhum número menor que 3, então ele fica na mesma
posição.
• O número 5 foi escolhido novamente e o único número menor que ele à sua
direita é o 4, então eles trocam.
• Vetor já ordenado.
Esta seção trata de outro algoritmo de ordenação bem conhecido. (Veja o verbete
Selection sort na Wikipedia.) Ele usa a seguinte estratégia: seleciona o menor elemento
do vetor, depois o segundo menor, depois o terceiro menor, e assim por diante:
// Esta função rearranja o vetor v[0..n-1] em
// ordem crescente.
void
selecao (int n, int v[])
{
int i, j, min, x;
for (i = 0; i < n-1; ++i) {
min = i;
for (j = i+1; j < n; ++j)
if (v[j] < v[min]) min = j;
x = v[i]; v[i] = v[min]; v[min] = x;
}
}
Para entender por que o algoritmo está correto, basta observar que no início de cada
repetição do for externo, imediatamente antes da comparação de i com n-1, valem os
seguintes invariantes:
1. o vetor v[0..n-1] é uma permutação do vetor original,
2. v[0..i-1] está em ordem crescente e
3. v[i-1] ≤ v[i..n-1].
A tradução do terceiro invariante para linguagem humana é a seguinte: v[0..i-1]
contém todos os elementos pequenos do vetor original e v[i..n-1] contém todos os
elementos grandes. Os três invariantes garantem que no início de cada iteração v[0], . .
, v[i-1] já estão em suas posições definitivas.
0 crescente i-1 i
110 120 120 130 140 999 666 999 666 999
pequenos grandes
Selection sort
O selection sort vasculha repetidamente a lista de itens, selecionando um elemento de
cada vez e colocando-o na posição correta da sequência. A principal vantagem do
selection sort é que ela funciona bem em uma lista pequena. Além disso, por ser um
algoritmo de ordenação de local, não precisa de armazenamento temporário além do
necessário para guardar a lista original. A principal desvantagem é sua baixa eficiência
em listas grandes. Assim como o bubble sort, ele exige n² números de passos para cada
n elementos. Adicionalmente, o seu desempenho é facilmente influenciado pela ordem
inicial dos itens antes do processo de triagem. Devido a isso, esse tipo seleção é
adequado apenas para uma lista em que poucos elementos estejam em ordem aleatória.
http://www.decom.ufop.br/menotti/aedI082/tps/tp3-sol1.pdf
http://tiagomadeira.com/2006/01/ordenacao-por-selecao/
http://www.devmedia.com.br/algoritmos-de-ordenacao-analise-e-comparacao/28261
http://professor.ufabc.edu.br/~jesus.mena/courses/bc0505-1q-2013/slides-aulas/teoria-
semana09-01-ordenacao.pdf
http://www.univasf.edu.br/~marcelo.linder/arquivos_aed2/aulas/aula12.pdf
http://www.fucapi.br/educacao/files/2012/07/GUIA-DE-NORMATIZA
%C3%87%C3%83O_VERSAOFINALJUN12.pdf
http://www.cafw.ufsm.br/~bruno/disciplinas/estrutura_dados/slides/aula13_14_selectionSort
_insertionSort.pdf
http://www.fucapi.br/educacao/files/2012/07/GUIA-DE-NORMATIZA
%C3%87%C3%83O_VERSAOFINALJUN12.pdf
http://www.cafw.ufsm.br/~bruno/disciplinas/estrutura_dados/slides/aula13_14_selectionSort
_insertionSort.pdf

Mais conteúdo relacionado

Semelhante a Selection Sort - Algoritmo de ordenação por seleção

Trabalho de algoritmos
Trabalho de algoritmosTrabalho de algoritmos
Trabalho de algoritmosSandro Arpi
 
Algorimos De Ordenação
Algorimos De OrdenaçãoAlgorimos De Ordenação
Algorimos De OrdenaçãoBrian Supra
 
Análise de desempenho de algoritmos de ordenação
Análise de desempenho de algoritmos de ordenaçãoAnálise de desempenho de algoritmos de ordenação
Análise de desempenho de algoritmos de ordenaçãoGustavo Carvalho
 
Alg04 - Vetores e Matrizes.pdf
Alg04 - Vetores e Matrizes.pdfAlg04 - Vetores e Matrizes.pdf
Alg04 - Vetores e Matrizes.pdfSilvano Oliveira
 
Aulas de estrutura de dados por Ayrton Yagami
Aulas de estrutura de dados por Ayrton YagamiAulas de estrutura de dados por Ayrton Yagami
Aulas de estrutura de dados por Ayrton YagamiAyrton Yagami
 
Gnome Sort
Gnome SortGnome Sort
Gnome Sortf2008
 
Ordenação de Vetores Gnome Sort
Ordenação de Vetores Gnome SortOrdenação de Vetores Gnome Sort
Ordenação de Vetores Gnome Sortf2008
 
mod4-estruturas-dadosestaticas-ordenacao
mod4-estruturas-dadosestaticas-ordenacaomod4-estruturas-dadosestaticas-ordenacao
mod4-estruturas-dadosestaticas-ordenacaodiogoa21
 

Semelhante a Selection Sort - Algoritmo de ordenação por seleção (17)

Trabalho de algoritmos
Trabalho de algoritmosTrabalho de algoritmos
Trabalho de algoritmos
 
Aula 4
Aula 4 Aula 4
Aula 4
 
Algorimos De Ordenação
Algorimos De OrdenaçãoAlgorimos De Ordenação
Algorimos De Ordenação
 
2 referencial teorico
2 referencial teorico2 referencial teorico
2 referencial teorico
 
Cap09
Cap09Cap09
Cap09
 
Cap09
Cap09Cap09
Cap09
 
Cap09
Cap09Cap09
Cap09
 
Análise de desempenho de algoritmos de ordenação
Análise de desempenho de algoritmos de ordenaçãoAnálise de desempenho de algoritmos de ordenação
Análise de desempenho de algoritmos de ordenação
 
Alg04 - Vetores e Matrizes.pdf
Alg04 - Vetores e Matrizes.pdfAlg04 - Vetores e Matrizes.pdf
Alg04 - Vetores e Matrizes.pdf
 
ARITMÉTICA.pdf
ARITMÉTICA.pdfARITMÉTICA.pdf
ARITMÉTICA.pdf
 
Aulas de estrutura de dados por Ayrton Yagami
Aulas de estrutura de dados por Ayrton YagamiAulas de estrutura de dados por Ayrton Yagami
Aulas de estrutura de dados por Ayrton Yagami
 
8. matrizes
8. matrizes8. matrizes
8. matrizes
 
Gnome Sort
Gnome SortGnome Sort
Gnome Sort
 
Ordenação de Vetores Gnome Sort
Ordenação de Vetores Gnome SortOrdenação de Vetores Gnome Sort
Ordenação de Vetores Gnome Sort
 
mod4-estruturas-dadosestaticas-ordenacao
mod4-estruturas-dadosestaticas-ordenacaomod4-estruturas-dadosestaticas-ordenacao
mod4-estruturas-dadosestaticas-ordenacao
 
Vetores e Matrizes.pdf
Vetores e Matrizes.pdfVetores e Matrizes.pdf
Vetores e Matrizes.pdf
 
Aula 5 aed - vetores
Aula 5   aed - vetoresAula 5   aed - vetores
Aula 5 aed - vetores
 

Selection Sort - Algoritmo de ordenação por seleção

  • 1. 1. para i 1 até tamanho-1, faça 2. minimo i 3. para j i+1 até tamanho, faça 4. se vetor[j] < vetor[minimo], então 5. minimo j 6. fim-se 7. fim-par 8. temp vetor[i] 9. vetor[i] vetor[minimo] 10. vetor[minimo] temp 11. fim-para tamanho = comprimento do vetor Funcionamento A idéia é sempre procurar o menor elemento do vetor e inseri-lo no início do vetor. Procuramos o menor valor do vetor e colocamos ele em vetor[1]. Procuramos o menor valor do vetor excluindo o já colocado e colocamos ele em vetor[2]. E assim vamos indo até termos todo o vetor ordenado. Partindo sempre a partir do último elemento reordenado (a partir do i), o programa procura o menor elemento no vetor e o substitue pelo elemento i atual. Exemplo de Funcionamento O programa recebe o seguinte vetor. v[1] v[2] v[3] v[4] v[5] v[6] 5 3 7 8 2 5 Aí ele começa com . Vou sempre marcar com a cor preta e com a cor cinza. v[1] v[2] v[3] v[4] v[5] v[6] 5 3 7 8 2 5 Ele marca o próprio índice i como a variável minimo, que é sempre o menor elemento do vetor. Então, ele faz um para de até o comprimento do vetor, com o objetivo de descobrir qual o menor elemento. … ... , portanto não mexemos em nada. ... , portanto não mexemos em nada.
  • 2. ... ... , portanto não mexemos em nada. Agora substituímos o v[minimo] pelo v[i], formando com isto o novo vetor: v[1] v[2] v[3] v[4] v[5] v[6] 2 3 7 8 5 5 E assim vamos fazendo com os outros elementos até que todo o vetor esteja ordenado. Custo Este algoritmo não tem um melhor/pior caso, porque todos os elementos são varridos, sempre. Medir seu custo é simples. Custo de linha por linha... n = tamanho do vetor 1. 2. 3. 4. 5. ??? 6. 7. 8. 9. 10. 11. Você pode estar se perguntando porque eu coloquei este custo para a linha 5. Afinal, a linha 5 diria que este programa tem um melhor/pior caso, porque ela não seria executada se o se retornar falso. Mas o caso é que ela é desprezível. Uma soma como estas para o custo geral do nosso algoritmo não vai influenciar em nada. Quer ver? Vamos somar os custos com esta linha valendo (como se nenhum se entrasse) e depois com ela valendo . Selection Sort Este algoritmo é baseado em se passar sempre o menor valor do vetor para a primeira posição (ou o maior dependendo da ordem requerida), depois o segundo menor valor para a segunda posição e assim sucessivamente, até os últimos dois elementos. Neste algoritmo de ordenação é escolhido um número a partir do primeiro, este número escolhido é comparado com os números a partir da sua direita, quando encontrado um
  • 3. número menor, o número escolhido ocupa a posição do menor número encontrado. Este número encontrado será o próximo número escolhido, caso não for encontrado nenhum número menor que este escolhido, ele é colocado na posição do primeiro número escolhido, e o próximo número à sua direita vai ser o escolhido para fazer as comparações. É repetido esse processo até que a lista esteja ordenada. Figura 3: Esquema de funcionamento do Selection Sort • Neste passo o primeiro número escolhido foi o 3, ele foi comparado com todos os números à sua direita e o menor número encontrado foi o 1, então os dois trocam de lugar. • O mesmo processo do passo 1 acontece, o número escolhido foi o 5 e o menor número encontrado foi o 2. • Não foi encontrado nenhum número menor que 3, então ele fica na mesma posição. • O número 5 foi escolhido novamente e o único número menor que ele à sua direita é o 4, então eles trocam. • Vetor já ordenado. Esta seção trata de outro algoritmo de ordenação bem conhecido. (Veja o verbete Selection sort na Wikipedia.) Ele usa a seguinte estratégia: seleciona o menor elemento do vetor, depois o segundo menor, depois o terceiro menor, e assim por diante: // Esta função rearranja o vetor v[0..n-1] em // ordem crescente. void selecao (int n, int v[]) {
  • 4. int i, j, min, x; for (i = 0; i < n-1; ++i) { min = i; for (j = i+1; j < n; ++j) if (v[j] < v[min]) min = j; x = v[i]; v[i] = v[min]; v[min] = x; } } Para entender por que o algoritmo está correto, basta observar que no início de cada repetição do for externo, imediatamente antes da comparação de i com n-1, valem os seguintes invariantes: 1. o vetor v[0..n-1] é uma permutação do vetor original, 2. v[0..i-1] está em ordem crescente e 3. v[i-1] ≤ v[i..n-1]. A tradução do terceiro invariante para linguagem humana é a seguinte: v[0..i-1] contém todos os elementos pequenos do vetor original e v[i..n-1] contém todos os elementos grandes. Os três invariantes garantem que no início de cada iteração v[0], . . , v[i-1] já estão em suas posições definitivas. 0 crescente i-1 i 110 120 120 130 140 999 666 999 666 999 pequenos grandes Selection sort O selection sort vasculha repetidamente a lista de itens, selecionando um elemento de cada vez e colocando-o na posição correta da sequência. A principal vantagem do selection sort é que ela funciona bem em uma lista pequena. Além disso, por ser um algoritmo de ordenação de local, não precisa de armazenamento temporário além do necessário para guardar a lista original. A principal desvantagem é sua baixa eficiência em listas grandes. Assim como o bubble sort, ele exige n² números de passos para cada n elementos. Adicionalmente, o seu desempenho é facilmente influenciado pela ordem inicial dos itens antes do processo de triagem. Devido a isso, esse tipo seleção é adequado apenas para uma lista em que poucos elementos estejam em ordem aleatória. http://www.decom.ufop.br/menotti/aedI082/tps/tp3-sol1.pdf http://tiagomadeira.com/2006/01/ordenacao-por-selecao/ http://www.devmedia.com.br/algoritmos-de-ordenacao-analise-e-comparacao/28261 http://professor.ufabc.edu.br/~jesus.mena/courses/bc0505-1q-2013/slides-aulas/teoria- semana09-01-ordenacao.pdf http://www.univasf.edu.br/~marcelo.linder/arquivos_aed2/aulas/aula12.pdf