Método Burbuja

Iniciado por Lain0x, 1 Mayo 2011, 19:18 PM

0 Miembros y 1 Visitante están viendo este tema.

Lain0x

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.

#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];
         }
         
      }

Akai

Tu implementación falla en, que para obtener el resultado correcto, no deberías visualizar el resultado hasta el final.


 for(int i=0;i<n;i++)
   {
        burbuja(a,n);
   }
for(int i=0;i<n;i++)
   {
     printf("%d\n",a[i]);
   }



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.

Lain0x

Voy a probar las dos formas, haré todo lo posible para que resulte.

Gracias

Lain0x

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.

#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;
               } 
            }
         }
     }