Algoritmos de Ordenação #1 – Bubble Sort

Padrão

Olá pessoal! Começamos aqui uma série de posts sobre algoritmos de ordenação. A Ordenação ou Classificação de Dados consiste em uma das tarefas mais frequentes e importantes do processamento de dados. Através dela, é determinada a ordem em que serão apresentadas as entradas de uma tabela de modo que obedeçam à sequência ditada po um ou mais campos (conhecidos como chaves de classificação). Tais ambientes podem na memória principal (RAM), denominado ordenação interna ou em memórias secundárias (como os discos), sendo então uma ordenação externa.

Os algoritmos de ordenação, são “receitas” para ordenar conjuntos de dados. Existem diversos algoritmos, cada qual com uma característica de como ocorre a ordenação, e consequentes melhores aplicações.

Para iniciar a série, vou apresentar uma implementação simples que fiz em C, do algoritmo conhecido como Bubble Sort ou Ordenação por Aprofundamento. Este é um algoritmo simples, que consiste em percorrer a lista de dados comparando os dados adjacentes, trocando-os de ordem caso estejam em ordem invertida. Ao realizar-se uma troca, o algoritmo volta para o início, começando a varredura novamente. É o algoritmo de ordenação que possui o pior desempenho. Mas serve pra uso simples, quando o desempenho não é um fator crítico.

A implementação, como eu disse, está na linguagem C, passando-se um vetor no primeiro parâmetro (que é ordenado, já que em C os vetores são passados como referência), seguido do tamanho do vetor. Fique à vontade para adaptar para outras linguagens ou alterar o tipo de dado e fazer uso em seus aplicativos 🙂

// Algoritmo de Ordenação Bubble Sort
// Implementação por Rafael Toledo (rafaeldtoledo@gmail.com)
// http://striker07.wordpress.com

void bubbleSort(int *vetor, const int tamanho)
{
   int chave, i, aux;

   contador = 0;
   do
   {
      chave = 1;
      for(i = 0; i < tamanho - 1; i++)
      {
         if(vetor[i] > vetor[i + 1])
         {
            aux = vetor[i];
            vetor[i] = vetor[i + 1];
            vetor[i + 1] = aux;
            chave = 0;
         }
      }
   }while(chave == 0);
}
  • mateus

    esta certo na logica e na sintaxe mais pense vc tem q incluir um for de i– pra q toda vez q vc troque vc confira se esta realmente ordenado, exemplo um vetor de 5 numeros nessa ordem 23157, vc compara 2 com 3, ta em ordem, beleza, depois vem 3 com 1, ai vc troca, so q depois vc compara pra frente e veja como fica agora o vetor depois das trocas de acordo ao seu algoritmo, 21357, n esta ordenado, vc tinha q fazer um i–,para trocar o 2 com o 1

    • Rafael

      É para isso que serve o “do-while”. Após a verificação de 2 em 2 itens, ele inicia novamente a verificação do vetor. Somente caso ele passe por todo o vetor sem realizar nenhuma alteração (ou seja, todos os itens estão ordenados) é que você encerra o algoritmo.