Pular para o conteúdo
Desenvolvimento & DevOps

Ordenar e procurar dentro de um vetor: da troca de valores à busca binária

Caco AltzhbergPorCaco Altzhberg Atualizado em 6 min de leitura
Algoritmo 14: Domine Vetores e Economize Tempo na Programação
Algoritmo 14: Domine Vetores e Economize Tempo na Programação
Compartilhe

Depois que o vetor deixa de ter cinco posições e passa a ter mil, a pergunta muda de figura: como colocar os valores em ordem e como encontrar um deles sem percorrer a lista inteira. Montar um algoritmo de ordenação de vetor em pseudocódigo é o exercício que conecta tudo o que veio antes, repetição, comparação e troca de variáveis, em um resultado visível.

Existem duas famílias de tarefa aqui, e elas se apoiam uma na outra. Ordenar coloca os elementos em sequência crescente ou decrescente. Buscar localiza a posição de um valor. A busca fica muito mais rápida quando o vetor já está ordenado, o que explica por que os dois temas quase sempre aparecem na mesma lista de exercícios. Se a ideia de sequência de passos ainda soa abstrata, o texto sobre o que é um algoritmo no dia a dia ajuda a fixar a base antes de entrar no código.

A operação que sustenta toda ordenação: a troca

Nenhum método de ordenação funciona sem trocar dois elementos de lugar. E trocar exige uma terceira variável, porque atribuir diretamente destrói um dos valores.

Em pseudocódigo, o padrão é: guarde o primeiro valor em uma variável auxiliar, copie o segundo para a posição do primeiro, e então copie a auxiliar para a posição do segundo. Quem tenta fazer em dois passos acaba com o mesmo número repetido nas duas posições. Esse é provavelmente o erro mais comum de toda a lista.

Algoritmo de ordenação de vetor em pseudocódigo pelo método da bolha

O método da bolha compara elementos vizinhos e troca quando estão fora de ordem. A cada passagem completa pelo vetor, o maior valor restante “sobe” até o fim. Repetindo o processo, o vetor fica ordenado.

  1. Percorra o vetor da primeira até a penúltima posição.
  2. Compare cada elemento com o seguinte.
  3. Se o da esquerda for maior, troque os dois usando a variável auxiliar.
  4. Ao terminar a passagem, repita tudo, mas sem incluir as posições já fixadas no fim.
  5. Pare quando uma passagem inteira não fizer nenhuma troca.

O passo cinco é a otimização que separa a versão ingênua da versão razoável. Sem ele, o algoritmo continua percorrendo um vetor já ordenado. Com uma variável indicadora de troca, ele encerra assim que o trabalho acabou.

Ordenação por seleção, quando trocas custam caro

A alternativa mais didática é a seleção. Em vez de trocar vizinhos o tempo todo, ela procura o menor valor do trecho ainda desordenado e o coloca na posição correta com uma única troca por passagem. Faz muito menos movimentação de dados, embora o número de comparações seja parecido.

MétodoIdeia centralTrocasMelhor uso
BolhaCompara vizinhos e trocaMuitasEnsino e vetores quase ordenados
SeleçãoAcha o menor e posicionaUma por passagemQuando mover dado é caro
InserçãoInsere cada item no trecho já ordenadoVariávelVetores pequenos ou quase ordenados

Busca linear e busca binária: a diferença que aparece na escala

A busca linear percorre o vetor do início ao fim comparando cada posição com o valor procurado. Funciona sempre, ordenado ou não, e é a opção certa para vetores pequenos.

A busca binária exige vetor ordenado e trabalha por eliminação. Ela olha o elemento do meio; se o valor buscado for menor, descarta a metade de cima; se for maior, descarta a de baixo. A cada comparação, metade do vetor sai do jogo.

Na prática, em um vetor de mil posições, a busca linear pode precisar de mil comparações no pior caso. A binária resolve em cerca de dez. Esse contraste é o argumento que justifica o custo de ordenar antes de buscar quando muitas consultas serão feitas. Materiais acadêmicos sobre IME-USP detalham o raciocínio formal por trás dessa contagem, e outros documentos acadêmicos trazem variações do mesmo método aplicadas a tabelas.

Os detalhes que quebram a busca binária

  • Vetor não ordenado: o método simplesmente devolve resposta errada, sem erro aparente.
  • Cálculo do meio: use divisão inteira. Índice fracionário não existe.
  • Atualização dos limites: esqueça de somar ou subtrair uma unidade e o laço nunca termina.
  • Condição de parada: o laço continua enquanto o limite inferior for menor ou igual ao superior.
  • Elemento ausente: defina um retorno claro, como menos um, para indicar que não foi encontrado.

Como testar o seu vetor antes de entregar

Um exercício de vetor passa em qualquer teste feito com números bonitos e falha no caso limite. Use sempre este conjunto:

  1. Vetor já ordenado, para ver se o algoritmo encerra cedo.
  2. Vetor em ordem inversa, o pior caso da bolha.
  3. Vetor com elementos repetidos, que costuma expor comparação com sinal errado.
  4. Vetor com um único elemento, que deve funcionar sem entrar no laço de troca.
  5. Busca por um valor inexistente, por um valor na primeira posição e por um na última.

Fazer isso na tabela de teste de mesa, com um vetor de cinco posições, encontra praticamente todos os erros de índice. Explicações em vídeo como a Lógica de Programação do Curso em Vídeo e as aulas do professor Guanabara são úteis para comparar a sua solução com outra abordagem depois de tentar sozinho. Discussões de exercícios em plataformas como o Brainly também ajudam a ver variações do mesmo enunciado, e vale conferir mais de uma resposta no Brainly antes de adotar qualquer solução pronta.

Quando não escrever a ordenação você mesmo

No exercício, escrever é o objetivo. Fora dele, praticamente toda linguagem já traz uma função de ordenação pronta, mais rápida e testada do que qualquer implementação manual. Entender bolha e seleção serve para saber o que acontece por baixo, escolher a estratégia certa e reconhecer quando o custo de ordenar não compensa o número de buscas que você vai fazer.

Perguntas frequentes

Por que preciso de uma variável auxiliar para trocar valores?

Porque atribuir um elemento ao outro sobrescreve o valor original. A auxiliar guarda a cópia até que a segunda atribuição seja feita.

Qual método devo usar na prova?

Se o enunciado não especifica, a bolha costuma ser aceita por ser a mais simples de justificar. A seleção é preferível quando o exercício pede o menor número de trocas.

A busca binária funciona em vetor com repetidos?

Funciona, mas encontra uma ocorrência qualquer, não necessariamente a primeira. Para achar a primeira, é preciso continuar deslocando o limite superior após um acerto.

Índice começa em zero ou em um?

Depende da convenção adotada. Em pseudocódigo escolar costuma começar em um; na maioria das linguagens, em zero. Defina no início e mantenha.

Ordenar sempre vale a pena antes de buscar?

Só quando haverá muitas buscas no mesmo vetor. Para uma consulta única em vetor desordenado, a busca linear sai mais barata.

Como ordenar em ordem decrescente?

Basta inverter o sinal da comparação. A estrutura do laço e a troca permanecem idênticas.

O que levar dessa leitura

Escrever um algoritmo de ordenação de vetor em pseudocódigo se reduz a três peças: a troca com variável auxiliar, o laço que reduz a área de trabalho a cada passagem e a condição que encerra assim que não há mais desordem. Com o vetor ordenado, a busca binária transforma centenas de comparações em poucas. Teste sempre com vetor invertido, com repetidos e com um só elemento, porque é nesses casos que os erros de índice aparecem.

Mais em Desenvolvimento & DevOps

Compartilhe
Próxima leituraDocker em produção: do erro ao controle em 6 passos práticos8 min de leitura

Mapa do site