21 – Lógica de Programação – Algoritmo para Ordenação de Vetores
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
Código usado no vídeo para estudo no VisualG:
algoritmo “Ordenação de Vetores”
// Função : Ordenar os dados em um array unidimensional
// Autor : Fábio dos Reis – Bóson Treinamentos
// Data : 10/09/2013
var
CONTADORA, CONTADORB: inteiro
NUM, AUX: inteiro
VET: vetor[1..3] de inteiro
inicio
// Atribuir valores ao array
para CONTADORA de 1 ate 3 faca
escreval (“Digite um número”)
leia (NUM)
VET[CONTADORA] <- NUM fimpara // Ordenar o array para CONTADORA de 1 ate 2 faca para CONTADORB de CONTADORA + 1 ate 3 faca se VET[CONTADORA] > VET[CONTADORB] entao
AUX <-VET[CONTADORB] VET[CONTADORB] <- VET[CONTADORA] VET[CONTADORA] <- AUX fimse fimpara fimpara // Exibir os dados ordenados no array para CONTADORA de 1 ate 3 faca escreval(VET[CONTADORA]) fimpara fimalgoritmo
Estou querendo video de shell script. Pois quero aprender. Obrigado.
Lista de Shell Script adicionada ao Site.
Abraço!
Onde encontro aulas da linguagem Pascal, do mesmo e bom nivel e clareza da BOSONTREINAMENTOS?????????????????????????????????????????
Será aqui mesmo Jorge, em breve colocaremos um curso de pascal no site. Abraço!!!!!!
Excelente conteúdo do site, continuem assim, parabéns!!
Olá professor!
Se for possível gostaria de saber, no caso de ordenar um vetor no visualg por ordem alfabética como seria? Obrigado e parabéns pelo site. Achei simplesmente fantástico!!!
Sensacional, aulas excelentes. Obrigado e Parabéns Professor.
Valeu Fernando!