Escolar Documentos
Profissional Documentos
Cultura Documentos
A Ordenação por Seleção, ou Selection Sort, é um dos algoritmos mais simples para utilizarmos
ao ordenar listas de elementos, em qualquer linguagem. Consiste em basicamente montar dois
laços de repetição, sendo o primeiro o iterador – chamemos ele de i - sobre a lista em si (do
primeiro ao penúltimo item) e o segundo – chamemos de j - irá iterar a partir de um menor
elemento do vetor, partindo da próxima posição após o índice i. Dentro do laço j, a iteração
funciona da seguinte forma: O algoritmo verifica se o elemento atual – vetor[i] – é menor que
o elemento encontrado até aquele momento – vetor[menor]. Se sim, o índice desse elemento
é atualizado para j e o contador de comparações é incrementado em uma unidade,
independente se a comparação for falsa ou verdadeira. Após concluir o loop interno, o
algoritmo verifica se o índice do menor elemento é diferente do índice atual (i). Se forem
diferentes, isso indica que um elemento menor foi encontrado e, portanto, realiza a troca
entre o elemento atual (vetor[i]) e o elemento encontrado (vetor[menor]). Ao final do laço de
comparações, é chamada uma variável auxiliar para receber o valor de vetor[i], seguindo a
partir disso operações que trocam os valores de lugar, assim como atualizando o contador de
movimentações – o incrementando em 2.
Como podemos observar, a operação em si é mais simples (sendo a parte dos laços for
aninhados a parte mais difícil de entender de cara), parte da ação se parecendo muito com
exercícios simples de construção de algoritmos (a troca dos valores utilizando variável auxiliar).
Uma desvantagem que pode ser contornada é o fato de o algoritmo em questão não
ser estável para ordenar arrays com chaves iguais (por exemplo, um array que apresente a
forma [4A,5,3,2,4B,1]). Porém, o Selection Sort pode ser estabilizado alterando a operação de
comparação de chave para que a comparação de duas chaves considere a posição como um
fator para objetos com chave igual ou o ajustando de forma que o significado da chave não
mude, o tornando estável.
Comparado a outros algoritmos que fazem a mesma tarefa, o Selection Sort leva a
pior, por conta da sua complexidade O(n²). Ainda há uma certa vantagem em utilizar este
algoritmo, por conta da quantidade de passos necessários e se o foco do uso for simplicidade
na hora de escrever o código, mas deve-se evitá-lo quando se busca eficiência. Outros
algoritmos, como o Merge Sort, Quick Sort ou Heap Sort, que possuem complexidade O(n log
n) ou até O(n) – dependendo do caso. Mesmo o seu uso em um cenário de melhor caso não
melhora as coisas, já que a quantidade de memória gasta pode ser um entrave. A eficiência
deste algoritmo, como dito antes, se mostra quando o conjunto de dados a ordenar é simples
e relativamente pequeno, uma mão na roda nesses casos.
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define tam 9
int i;
vetor[i] = (rand() % 9) + 1;
menor = i;
menor = j;
*comparacoes +=1;
if (i != menor)
auxiliar = vetor[i];
vetor[i] = vetor[menor];
*movimentacoes +=1;
vetor[menor] = auxiliar;
*movimentacoes +=1;
int main()
{
int i, v[tam];
srand(time(NULL));
preencherVetor(v, tam);
printf("%d\t", v[i]);
printf("%d\t", v[i]);
return 0;
Observações:
1. Diferente de outros códigos, neste foi usado uma função responsável por preencher o vetor
Descrição do funcionamento:
O algoritmo é composto por 2 laços for. O primeiro é responsável por cuidar do índice inicial e
o segundo por percorrer o vetor. Inicialmente, o primeiro laço inicializa o índice com o valor 0
e é adicionado 1 unidade a cada iteração. Já o segundo percorre o vetor começando do índice
inicial + 1 a fim de achar um elemento que seja menor que o presente na posição inicial, caso
tenha.
Vetor:
O índice inicial é 0 e o laço mais interno começa da posição 1 (índice inicial + 1) e percorre o
vetor até achar o menor elemento, neste caso o número zero. Assim, pelo fato de os dois
índices serem diferentes, o zero troca de posição com o elemento nove.
Após o término do segundo laço, 1 unidade é incrementada ao primeiro laço e o loop mais
interno começa do índice 2. Dito isso, o processo de comparações é iniciado e o elemento um
troca de posição com o elemento sete após ser verificado que ele é o segundo menor número
do vetor.
Mais 1 unidade é incrementada ao primeiro laço e o loop mais interno começa do índice 4.
Após comparações, o quarto menor elemento é encontrado no último índice e troca de
posição com o elemento sete.
Mais 1 unidade é incrementada ao primeiro laço e o loop mais interno começa do índice 5.
Finalizado o for, o menor elemento encontrado é o 7, o qual muda de posição com o elemento
8.
Mais 1 unidade é incrementada ao primeiro laço e o loop mais interno começa do índice 6.
Como conclusão, o menor elemento restante é o 8, o qual muda de posição com o elemento 9,
o maior deste vetor.
https://www.geeksforgeeks.org/selection-sort/
https://www.geeksforgeeks.org/stable-selection-sort/
https://pt.slideshare.net/DanielArndtAlves/selection-sort-25735943
https://link.springer.com/chapter/10.1007/978-3-540-77978-0_5