Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Lain0x en 1 Mayo 2011, 19:18 pm



Título: Método Burbuja
Publicado por: Lain0x en 1 Mayo 2011, 19:18 pm
Hola, estoy tratando de aplicar el método Burbuja en C, pero no lo consigo. Estoy seguro que debe ser algún détalle que me falta.

Código:
#include<stdio.h>
#include<stdlib.h>

int burbuja(int a[], int n);

int main()
{
    int n;
    printf("Ingrese el tamaño del arreglo: \n");
    scanf("%d",&n);
   
    int a[n];
   
   
    printf("Ingrese los elementos al arreglo: \n");
    for(int i=0;i<n;i++)
    {
         scanf("%d",&a[i]);
    }
   
    for(int i=0;i<n;i++)
    {
         a[i] = burbuja(a,n);
         printf("%d\n",a[i]);
    }
   
    system("pause");
    return 0;
}
     
     int burbuja(int a[],int n)
     {
         int aux=0;
         
         for(int i=0;i<n;i++)
         {
            if(a[i]<a[i-1])
            {
               aux = a[i];
               a[i] = a[i-1];
               a[i-1] = aux;
            } 
            return a[i];
         }
         
      }


Título: Re: Método Burbuja
Publicado por: Akai en 1 Mayo 2011, 20:23 pm
Tu implementación falla en, que para obtener el resultado correcto, no deberías visualizar el resultado hasta el final.


Código
  1.  for(int i=0;i<n;i++)
  2.    {
  3.         burbuja(a,n);
  4.    }
  5. for(int i=0;i<n;i++)
  6.    {
  7.      printf("%d\n",a[i]);
  8.    }
  9.  


Luego, ya visualizas el resultado.

Añado algo, visto así, queda extraño. Lo "ideal" sería tener en la función burbuja todo el cálculo cuadrático de la ordenación (los dos bucles) y no lanzar n veces dicha función,que en tu caso realiza ordenaciones parciales, sino únicamente lanzarla una vez con el código completo.

El resultado es el mismo, si, la claridad a la hora de leerlo, no. Y si estás aprendiendo, te interesa mucho lo segundo.


Título: Re: Método Burbuja
Publicado por: Lain0x en 1 Mayo 2011, 20:55 pm
Voy a probar las dos formas, haré todo lo posible para que resulte.

Gracias


Título: Re: Método Burbuja
Publicado por: Lain0x en 1 Mayo 2011, 21:41 pm
Listo, me quedó así y resultó a la perfección. Se suponía que antes tenía el método como int, y no entendía porque no funcionaba el método de la forma que lo escribiste. Y es que tenía que ser vacío para utilizarlo de esa forma.

Código:
#include<stdio.h>
#include<stdlib.h>

void burbuja(int a[], int n);

int main()
{
    int n;
    printf("Ingrese el tamaño del arreglo: \n");
    scanf("%d",&n);
   
    int a[n];
   
   
    printf("Ingrese los elementos al arreglo: \n");
    for(int i=0;i<n;i++)
    {
         scanf("%d",&a[i]);
    }
   
    burbuja(a,n);
   
    for(int i=0;i<n;i++)
    {
       printf("%d\n",a[i]);
    }
   
    system("pause");
    return 0;
}
     
     void burbuja(int a[],int n)
     {
         int aux=0, i, j;
         
         for(i=0;i<n-1;i++)
         {
            for(j=i+1;j<n;j++)
            {             
               if(a[i]>a[j])
               {
                 aux = a[i];
                 a[i] = a[j];
                 a[j] = aux;
               } 
            }
         }
     }