/
Inicio :: Foros

 F.A.Q.F.A.Q.                  Conéctese para revisar sus mensajesConéctese para revisar sus mensajes   

Metodo de la Burbuja

 
      Índice del Foro elrincondelc.com -> Algoritmos
Ver tema anterior :: Ver siguiente tema  
AutorMensaje
Bitojis



Registrado: 30 Dic 2004
Mensajes: 38

MensajePublicado: 30/12/2004 4:54 am
Título: Metodo de la Burbuja

Hola, necesito ordenar los numeros enteros contenidos en un array a traves del metodo de la burbuja, pero no lo consigo. Esta es la parte del codigo donde aparece el meodo de la burbuja:

//Seleccionamos el tipo de ordenacion
cout<<"Introduzca-m- si desea que la ordenacion se de
menor a mayor, o -M- si desea que sea de mayor a
menor: ";
cin>>ordenacion;
//Comenzamos el metodo de la burbuja y declaramos las
variables que utilizaremos para dicho metodo
static int TAM = 10;
int i, j;
int temp;
//Si hemos seleccionado el proceso de menor a mayor
comenzara el siguiente paso
if (ordenacion == 'm'){
//Comienza el metodo de la burbuja
for (i=1; i>TAM; i++){
for (j=0; j<TAM;j++)
if (valores[j] > valores[j+1])
{
temp = valores[j];
valores[j] = valores[j+1];
valores[j+1] = temp;
}
}
//Termina el metodo de la burbuja

//Mostramos los valores
int c = 0;
do{
cout<<valores[c]<< "<";
c++;
}
while (c<10);
cout<<endl;



Un saludo![/img]
Volver arriba
helldaga



Registrado: 12 Nov 2004
Mensajes: 114
Ubicación: Hell

MensajePublicado: 30/12/2004 7:24 am
Título:

El método esta mal implementado, aqui le coloco un pequeño ejemplo con el método correcto:



Código:

#include <conio.h>
#include <iostream.h>


#define MAXNUM 5 /* define la cantidad de numeros maximos a utilizar*/


void main()
{
int arreglo [MAXNUM],temporal,i,j;
for (i=0; i<MAXNUM; i++)
{
 cout<<"Digite el elemento  "<<i+1<<" del arreglo\n";
 cin>> arreglo[i];
}

// Aqui se aplica el metodo burbuja
for (i=0; i<MAXNUM-1; i++)
   for (j=i+1; j<MAXNUM; j++)
   
   {

      if (arreglo[i] < arreglo[j])//Para ordenar menor a mayor solo hay que cambiar el signo < por >
                  {
          temporal = arreglo[i];
          arreglo[i] = arreglo[j];
          arreglo[j] = temporal;   
                  }

   }
//Aqui termina el método.

cout<<endl;
cout<<"El arreglo ardenado es: \n";
   for (i=0; i<MAXNUM; i++)
     cout<<arreglo[i]<<"  ";

getch();
}


SUERTE.
Volver arriba
Bitojis



Registrado: 30 Dic 2004
Mensajes: 38

MensajePublicado: 31/12/2004 4:03 am
Título:

Hola, he cambiado el codigo por este, pero sigue sin ordenar bien. Al msotrarme la ordenación, el ultimo número que me sale es 109 y yo no he introducido dicho número. ¿A que puede ser debido?

Código:
//Comenzamos el metodo de la burbuja y declaramos las variables que utilizaremos para dicho metodo
static int TAM = 10;
int i, j;
int temp;

//Si hemos seleccionado el proceso de menor a mayor comenzara el siguiente paso
if (ordenacion == 'm'){
//Comienza el metodo de la burbuja
for (i=0; i<TAM-1; i++){
   for (j=i+1; j<TAM;j++)
       if (valores[i] > valores[j])
       {
           temp = valores[i];
           valores[i] = valores[j];
           valores[j] = temp;
           }
}

//Termina el metodo de la burbuja

//Mostramos los valores
cout<<endl;
cout<<"El arreglo ardenado es: \n";
   for (i=0; i<TAM; i++)
     cout<<valores[i]<<"  ";
 
         
}//Termina la ordenacion



Muchas Gracias
Volver arriba
helldaga



Registrado: 12 Nov 2004
Mensajes: 114
Ubicación: Hell

MensajePublicado: 31/12/2004 6:58 am
Título:

El código es correcto, ya lo probé, el error se puede deber a que cuanto usted esta ordenando el arreglo este no se encuentra totalmente lleno y ese número es basura de memoria, asegurese de llenar completamente el arreglo antes de ordenarlo, si no le funciona coloque el código completo y lo revisamos a ver cual es el error.SUERTE.
Volver arriba
Bitojis



Registrado: 30 Dic 2004
Mensajes: 38

MensajePublicado: 01/01/2005 3:56 am
Título:

Si, lleno completamente el array. Este es el codigo completo de lo que llevo

Código:
//Declaramos el array de forma global
int valores [9];
char ordenacion;

#include <iostream>
#include <stdlib.h>

using namespace std;

int main(int argc, char *argv[])
{
//Comenzamos a asignar valores al array
cout<< "Introduzca el primer valor: ";
cin>>valores[0];
cout<< "Introduzca el segundo valor: ";
cin>>valores[1];
cout<< "Introduzca el tercer valor: ";
cin>>valores[2];
cout<< "Introduzca el cuarto valor: ";
cin>>valores[3];
cout<< "Introduzca el quinto valor: ";
cin>>valores[4];
cout<< "Introduzca el sexto valor: ";
cin>>valores[5];
cout<< "Introduzca el septimo valor: ";
cin>>valores[6];
cout<< "Introduzca el octavo valor: ";
cin>>valores[7];
cout<< "Introduzca el noveno valor: ";
cin>>valores[8];
cout<< "Introduzca el decimo valor: ";
cin>>valores[9];

//mostramos los valores
int b = 0;
do{
cout<< "El valor "<< b << " es: "<< valores[b]<< endl;
b++;
}
while (b<10);

//Seleccionamos el tipo de ordenacion
cout<<"Introduzca-m- si desea que la ordenacion se de menor a mayor, o -M- si desea que sea de mayor a menor: ";
cin>>ordenacion;

//Comenzamos el metodo de la burbuja y declaramos las variables que utilizaremos para dicho metodo
static int TAM = 10;
int i, j;
int temp;

//Si hemos seleccionado el proceso de menor a mayor comenzara el siguiente paso
if (ordenacion == 'm'){
//Comienza el metodo de la burbuja
for (i=0; i<TAM-1; i++){
   for (j=i+1; j<TAM;j++)
       if (valores[i] > valores[j])
       {
           temp = valores[i];
           valores[i] = valores[j];
           valores[j] = temp;
           }
}

//Termina el metodo de la burbuja

//Mostramos los valores
cout<<endl;
cout<<"El arreglo ardenado es: \n";
   for (i=0; i<TAM; i++)
     cout<<valores[i]<<"  ";
  system("PAUSE");   
  return 0;
}
Volver arriba
helldaga



Registrado: 12 Nov 2004
Mensajes: 114
Ubicación: Hell

MensajePublicado: 01/01/2005 9:18 am
Título:

Ya vi cual es el error, el error radica en la forma como usted interpreta la cantidad de posiciones de un array, las posiciones de un array van desde cero hasta n-1, donde n son el numero de posiciones.Ejemplo:

*Cuando usted define:

int valores [9];

Las posiciones van de 0 hasta 8, la posicion 9 no existe, luego no tiene sentido que le asigne valores. Osea cuando hace:

cout<< "Introduzca el decimo valor: ";
cin>>valores[9];


*Con esto se puede ver el error al tratar de ordenar el array, usted define TAM = 10, donde el vector solo tiene 9 posiciones ( de 0 hasta Cool.
*Lo mismo cuando lo muestra por pantalla.

El código correcto sería:

Código:

//Declaramos el array de forma global
int valores [9];
char ordenacion;

#include <iostream>
#include <stdlib.h>

using namespace std;

int main(int argc, char *argv[])
{
//Comenzamos a asignar valores al array
cout<< "Introduzca el primer valor: ";
cin>>valores[0];
cout<< "Introduzca el segundo valor: ";
cin>>valores[1];
cout<< "Introduzca el tercer valor: ";
cin>>valores[2];
cout<< "Introduzca el cuarto valor: ";
cin>>valores[3];
cout<< "Introduzca el quinto valor: ";
cin>>valores[4];
cout<< "Introduzca el sexto valor: ";
cin>>valores[5];
cout<< "Introduzca el septimo valor: ";
cin>>valores[6];
cout<< "Introduzca el octavo valor: ";
cin>>valores[7];
cout<< "Introduzca el noveno valor: ";
cin>>valores[8];


//mostramos los valores
int b = 0;
do{
cout<< "El valor "<< b << " es: "<< valores[b]<< endl;
b++;
}
while (b<9);

//Seleccionamos el tipo de ordenacion
cout<<"Introduzca-m- si desea que la ordenacion se de menor a mayor, o -M- si desea que sea de mayor a menor: ";
cin>>ordenacion;

//Comenzamos el metodo de la burbuja y declaramos las variables que utilizaremos para dicho metodo
static int TAM = 9;
int i, j;
int temp;

//Si hemos seleccionado el proceso de menor a mayor comenzara el siguiente paso
if (ordenacion == 'm'){
//Comienza el metodo de la burbuja
for (i=0; i<TAM-1; i++){
   for (j=i+1; j<TAM;j++)
       if (valores[i] > valores[j])
       {
           temp = valores[i];
           valores[i] = valores[j];
           valores[j] = temp;
           }
}

//Termina el metodo de la burbuja

//Mostramos los valores
cout<<endl;
cout<<"El arreglo ardenado es: \n";
   for (i=0; i<TAM; i++)
     cout<<valores[i]<<"  ";
  system("PAUSE");   
  return 0;
}


Y listo.SUERTE.
Volver arriba
Bitojis



Registrado: 30 Dic 2004
Mensajes: 38

MensajePublicado: 01/01/2005 11:19 am
Título:

Es verdad, tenia razón. Muchas gracias.

Si no es mucho pedir (es que soy bastante novato en el tema de C++), me podría decir para que se usa el ultimo valor del array?
Volver arriba
helldaga



Registrado: 12 Nov 2004
Mensajes: 114
Ubicación: Hell

MensajePublicado: 01/01/2005 11:55 am
Título:

Lo que sucede es que la posicion n del vector en realidad no exite debido a que sus posiciones se enumeran desde cero, no es que se use para nada especial es que no existe simplemente. SUERTE.
Volver arriba
      Índice del Foro elrincondelc.com -> Algoritmos
Página 1 de 1Todas las horas están en GMT - 8 Horas

 
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas

(c) ElRincondelC.com

Un proyecto de UrlanHeat.com