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) } }