Algoritmo de ordenação: Bubble Sort

Publicado por mfs (última atualização em 12/04/2010)

[ Hits: 41.561 ]

Download bubble_sort.c




Este algoritmo ordena um vetor de uma quantidade de números pré-determinada. O diferencial é que ele não utiliza ponteiros para a passagem de parâmetros, pois ponteiros é um pouco complicado para iniciantes.

A utilização é simples, digite o número máximo de algarismos e depois digite os algarismos fora de ordem, a função vai ordena-los e imprimi-los em ordem.

Para compilar com o gcc é simples:

$ gcc -c bubble_sort.c
$ gcc -o bubble_sort bubble_sort.o
$ ./bubble_sort

Qualquer dúvida em relação ao código e só deixar um comentário que eu explico.

Abraços.

  



Esconder código-fonte

/* Algoritmo de ordenação Bubble Sort */

#include <stdio.h>

  /* Definição da função bubble_sort */
  void bubble_sort (int vet[], int max) {      
    int flag, i, aux;   
    
    do {
      flag = 0;
      for (i = 0; i < (max - 1); i++) {
   
   /* Verfica se o vetor está em ordem, no caso ele coloca em ordem crescente, para decrescente trocar '>' por '<' */
   if (vet[i] > vet[i+1]) {
     /* Caso não esteja, ordena */
     aux = vet[i];
     vet[i] = vet[i+1];
     vet[i+1] = aux;
     flag =1;
   }
      }
    /* Repete enquanto algum valor estiver fora de ordem */  
    } while (flag == 1);
    
    /* Imprime o vetor ordenado em ordem crescente */
    for (i = 0; i < max; i++) {
      printf ("%d ",vet[i]);
    }
    printf ("\n");
  }

main () {
  int max, i;
  
  /* Lê o total de números do vetor */
  scanf ("%d", &max);
  
  /* Define o vetor com o número max de algarismos */
  int vetor[max];
  
  for (i = 0; i < max; i++) {
    /* Lê cada indice do vetor */
    scanf ("%d",&vetor[i]);
  }
  
  /* Dentro dessa função o vetor será ordenado */
  bubble_sort (vetor, max); 
  
}

Scripts recomendados

Crivo de Eratóstenes

Tabela ASCII

Escolhe Animal

Classe para manipulação de números complexos

Soma entre matrizes


  

Comentários
[1] Comentário enviado por eduardo em 12/04/2010 - 15:38h

Tem certeza que dá para declarar um vetor sem tamanho específico? Nunca vi isso. Tu não teria que usar ponteiros para tal?

Funcionou esse código pra ti? Vai ver depende do compilador, testei aqui e não funcionou. Inclusive faltou a definição da main.

Abraços

[2] Comentário enviado por mfs em 12/04/2010 - 19:34h

Funcionou sim. Não usei ponteiros pois queria que entendessem o funcionamento dos algoritmos, e iniciantes geralmente sentem dificuldades em ponteiros. Aqui em casa funcionou, uso o gcc. Eu não declarei um vetor sem valor especifico, primeiro eu li a variavel max e depois declarei o vetor[max]. Se o valor de max for 10, por exemplo, seria o mesmo que vetor[10].
Eu poderia ter usado um contador, seria mais claro ainda. Nós fazíamos assim no curso, conforme se inseria um valor incrementava a variável de mais um.

[3] Comentário enviado por eduardo em 12/04/2010 - 20:47h

É cara, acho que é o compilador mesmo. Testei em outro e realmente aceita este tipo de processo. É que compilo normalmente no programa gráfico direto, e não aceita esse tipo de formato.

Abraços.

[4] Comentário enviado por mfs em 12/04/2010 - 23:14h

Eu inclusive testei de novo, pois eu programava em Windows no Dev-C e ele não é muito bom. Ficaria melhor ainda se declarasse um contador. E no for de leitura a cada algarismo digitado incrementar de um assim é possível digitar quantos quiser, só tem que definir um parâmetro de término do loop, por exemplo um numero negativo ou zero.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts