Lógica de Programação – Algoritmo para Ordenação de Vetores
É possível ordenar os valores armazenados em um vetor (array), em ordem alfabética ou numérica. A ordenação de um array é muito importante em vários contextos dentro de programação, como por exemplo para permitir a realização de pesquisa de valores com eficiência dentro de um vetor de tamanho grande.
Vamos trabalhar com um vetor de 3 posições nesta lição para entender o funcionamento desse mecanismo.
Criando o array
Iniciamos criando o array de três posições e uma variável auxiliar (pois usaremos a técnica de troca de valores de variáveis), como ilustra a figura a seguir:
Também vamos inserir dados no array. A seguir, o código usado para criar o array e a variável auxiliar, e solicitar ao usuário que entre com três números para ordenação:
var CONTADOR: inteiro NUM, AUX: inteiro VET: vetor[0..2] de inteiro inicio para CONTADOR de 0 ate 2 faca escreval ("Digite um número") leia (NUM) VET[CONTADOR] <- NUM fimpara //TODO: inserção de dados no array. A seguir. fimalgoritmo
Suponhamos que ao executar esse trecho de código, o usuário tenha entrado com os valores 5, 3 e 1, em sequência. O array assim preenchido ficará da seguinte forma:
- Posição 0: Valor 5
- Posição 1: Valor 3
- Posição 2: Valor 1
Como podemos ver, os valores armazenados no vetor não estão em ordem crescente (que é o que desejamos). Iremos agora montar um mecanismo para realizar a ordenação desses valores.
Ordenação do Vetor
O processo de ordenação do array será o seguinte:
1 – Primeiramente, comparamos o valor da posição 0 com o da posição 1. Se o valor da posição 1 for menor do que o da posição 0, seus valores são trocados. Caso contrário, nada é feito:
Como neste caso o valor da posição 1, que é 03, é menor do que o valor da posição 0, que é o 5, eles são trocados entre si, utilizando para isso a variável auxiliar:
2 – Agora vamos comparar o valor da posição 0 com o da próxima posição, que é a posição 2. Novamente, se o valor da segunda posição for menor do que o da anterior, seus valores devem ser trocados.:
Como neste caso o número 1 é menor do que o número 3, os valores das posições são trocados entre si, com a ajuda da variável auxiliar:
Esse processo deve ser repetido até que o valor da posição 0 tenha sido comparado com os valores de todas as outras posições do array, e trocados entre si sempre que for apropriado.
Após ter realizado a comparação do valor da posição 0 com as demais, passamos à próxima posição, que é a 1, e repetimos o processo anterior, comparando seu valor com os das demais posições adiante, até o final do array, e sempre trocando os valores quando o valor de ma posição posterior for menor do que o valor da posição 1:
Após a troca dos valores das duas posições, nosso array estará ordenado, pois não há mais posições para serem comparadas entre si:
O procedimento utilizado deve ser seguido para todas as posições do array para que seja realizada a ordenação de seus valores.
O código utilizado para realizar a ordenação em si é o que segue:
para CONTADORA de 0 ate 1 faca para CONTADORB de CONTADORA + 1 ate 2 faca se VET[CONTADORA] > VET[CONTADORB] entao AUX <-VET[CONTADORB] VET[CONTADORB] <- VET[CONTADORA] VET[CONTADORA] <- AUX fimse fimpara fimpara
Código Completo do Programa
A seguir temos o código completo de nosso programa de ordenação de vetores:
var CONTADORA, CONTADORB: inteiro NUM, AUX: inteiro VET: vetor[0..2] de inteiro inicio // Preenchendo o array: para CONTADORA de 0 ate 2 faca escreval ("Digite um número") leia (NUM) VET[CONTADORA] <- NUM fimpara // Ordenar o array: para CONTADORA de 0 ate 1 faca para CONTADORB de CONTADORA + 1 ate 2 faca se VET[CONTADORA] > VET[CONTADORB] entao AUX <-VET[CONTADORB] VET[CONTADORB] <- VET[CONTADORA] VET[CONTADORA] <- AUX fimse fimpara fimpara // Mostrando os valores ordenados: para CONTADORA de 0 ate 2 faca escreval(VET[CONTADORA]) fimpara fimalgoritmo
É isso aí! Com esse algoritmo podemos tomar um vetor de qualquer tamanho, e colocar seus dados em ordem crescente. Experimente alterar o código para trabalhar com outros tipos de dados, e também para realizar a ordenação decrescente (do maior para o menor valor).
Caso haja dúvidas sobre o funcionamento desse algoritmo, assista ao vídeo a seguir, no qual detalho os procedimentos realizados:
Anterior: Transferir valores de variáveis
Próximo: Pesquisa Sequencial em Vetores