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];
}
}
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.
Voy a probar las dos formas, haré todo lo posible para que resulte.
Gracias
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;
}
}
}
}