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:

Criar array para ordenação

 

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:

Array preenchido para ordenação de vetores

  • 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:

Ordenando vetores em lógica - 03

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:

Ordenação de arrays - trocando valores de variáveis em vetores

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.:

Ordenando arrays em lógica de programação

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:

Ordenação de vetores em lógica

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:

Ordenar vetor com algoritmo em lógica

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:

Ordenação de arrays - 08

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

 

Sobre Fábio dos Reis (1332 Artigos)
Fábio dos Reis trabalha com tecnologias variadas há mais de 25 anos, tendo atuado nos campos de Eletrônica, Telecomunicações, Programação de Computadores e Redes de Dados. É um entusiasta de Unix, Linux e Open Source em geral, adora Eletrônica e Música, e estuda idiomas, além de ministrar cursos e palestras sobre diversas tecnologias em São Paulo e outras cidades do Brasil.
Contato: Website

9 Comentários em 21 – Lógica de Programação – Algoritmo para Ordenação de Vetores

  1. 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

  2. Estou querendo video de shell script. Pois quero aprender. Obrigado.

  3. Onde encontro aulas da linguagem Pascal, do mesmo e bom nivel e clareza da BOSONTREINAMENTOS?????????????????????????????????????????

  4. Excelente conteúdo do site, continuem assim, parabéns!!

  5. Jaime A. Kaiper // 01/05/2015 em 8:53 // Responder

    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!!!

  6. Sensacional, aulas excelentes. Obrigado e Parabéns Professor.

Escreva um comentário

Seu e-mail não será divulgado


*