Na aula anterior do nosso curso de algoritmos e lógica de programação aprendemos como funciona o algoritmo de ordenação Bubble Sort. Nesta aula vamos aprender como ordenar um vetor com o algoritmo SELECTION SORT, Ordenação por seleção.
Assim como no algoritmo Bubble Sort, no algoritmo Selection Sort nossa repetição externa também será executada até tam – 1.
A ideia central deste algoritmo consiste em descobrir o menor elemento do vetor e colocá-lo na posição correta. A cada elemento ordenado, o intervalo a ser verificado diminui.
Inicialmente todo o vetor será percorrido. Ao final da primeira repetição, a variável menor terá o índice do menor elemento. Neste momento é feita a troca entre o primeiro elemento do vetor (índice i) e o menor (índice menor). Como a primeira posição já possui o menor elemento, ela não precisa ser verificada mais. O vetor a ser ordenado agora é a partir do índice 1.
Ao final da segunda repetição, novamente a variável menor terá o índice do segundo menor elemento do vetor. Este elemento novamente é trocado com o elemento da posição i, que agora vale 1.
Estes passos serão repetidos tam – 1 vezes. Ao final, o vetor estará completamente ordenado.
Assim como o algoritmo Bubble Sort, o algoritmo Selection Sort é simples, fácil de implementar e útil para pequenos conjuntos de dados, mas nada eficiente para grandes conjuntos de dados.
Algoritmo de ordenação Selection Sort em Portugol (Ordenação por seleção)
programa{
inclua biblioteca Util
/*
Aula 126: Algoritmo de ordenação Selection Sort
Código escrito por Wagner Gaspar
Abril de 2021
*/
// procedimento para imprimir um vetor de inteiros
funcao imprimir(inteiro vet[], inteiro tam){
inteiro i
para(i = 0; i < tam; i++)
escreva(vet[i], ",")
escreva("\n")
}
funcao inicio(){
inteiro i, j, menor, copia, tam = 20, vet[20]
para(i = 0; i < tam; i++)
vet[i] = Util.sorteia(1, 99)
imprimir(vet, tam)
para(i = 0; i < tam - 1; i++){
menor = i
para(j = i; j < tam; j++){
se(vet[j] < vet[menor])
menor = j
}
copia = vet[menor]
vet[menor] = vet[i]
vet[i] = copia
escreva("i: ", i, "\t")
imprimir(vet, tam)
}
imprimir(vet, tam)
}
}
