aula 126

Como ordenar um vetor com o algoritmo SELECTION SORT | Ordenação por seleção

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

Deixe um comentário

dois + 18 =

Wagner Gaspar

Capixaba de São Gabriel da Palha, Espírito Santo. Bacharel em Ciência da Computação pela Universidade Federal do Amazonas e mestre em informática pela Universidade Federal do Espírito Santo.