Ordenação é um dos inúmeros problemas clássicos da computação com diversas variações, algumas mais simples, outras mais complexas. Vou apresentar aqui uma das versões mais simples e, claro, não é a mais eficiente.
Na literatura este algoritmo é conhecido por algoritmo bolha ou bubble sort. Ele recebe este nome por causa de seu funcionamento. Imaginando um vetor na vertical, basicamente o que o algoritmo faz é percorrer o vetor várias vezes levando o maior elemento para o topo, como uma bolha de ar que vai subindo do fundo de uma lago.
Os passos poderiam ser descritos da seguinte forma:
1 – percorrer o vetor até a penúltima posição executando os passos 2 e 3;
2 – comparar cada posição i com a posição seguinte (i + 1);
3 – se o elemento da posição i for maior que o seguinte, então os dois são trocados de posição;
4 – quando todo o vetor tiver sido percorrido, verificar:
5 – se foi realizado ao menos uma troca, voltar o passo 1;
6 – senão, finalizar.
Abaixo apresento uma codificação desse algoritmo em Portugol. Criei um vetor de inteiros de tamanho 15, e três variáveis inteiras, i para a estrutura de repetição para, auxiliar para realizar a troca de posição dos elementos do vetor e, por fim, trocou, para sinalizar se devemos percorrer o vetor mais uma vez ou não.
Em seguida, fazemos uma repetição para sortear números entre 1 a 100 e popular nosso vetor, imprimirmos na tela o vetor gerado e, então iniciamos o processo de ordenação, realizando exatamente cada um dos passos descritos acima.
1 – enquanto houver ao menos uma troca (o valor 1 na variável trocou possui essa informação), a variável trocou, que iniciou com o valor 1, recebe o valor 0;
2 – todo o vetor é percorrido até a penúltima posição (a penúltima posição será comparada com a última posição, por isso não podemos percorrer o vetor até a última posição);
3 – se o elemento da posição i for maior que o seguinte, trocar os dois elementos de posição e alterar o valor da variável trocou para 1;
Por fim, escrevemos outro para para imprimir o vetor agora ordenado.
programa { inclua biblioteca Util funcao inicio() { inteiro vet[15], i, auxiliar, trocou = 1 para(i = 0; i < 15; i++){ vet[i] = Util.sorteia(1, 100) } escreva("Vetor gerado: ") para(i = 0; i < 15; i++){ escreva(vet[i], " ") } escreva("\n") enquanto(trocou == 1){ trocou = 0 para(i = 0; i < 15 - 1 ; i++){ se(vet[i] > vet[i+1]){ auxiliar = vet[i] vet[i] = vet[i+1] vet[i+1] = auxiliar trocou = 1 } } } escreva("\nVetor ordenado: ") para(i = 0; i < 15; i++){ escreva(vet[i], " ") } escreva("\n") } }
A seguir apresentamos um print da execução no ambiente de programação Portugol Studio.
Se ficou alguma dúvida deixe nos comentários abaixo que terei o maior prazer em ajudar. Abraços e até a próxima dica.