Ver Mensaje Individual
  #5 (permalink)  
Antiguo 16/08/2008, 14:40
Avatar de WaRc3L
WaRc3L
 
Fecha de Ingreso: agosto-2008
Ubicación: My House
Mensajes: 89
Antigüedad: 15 años, 9 meses
Puntos: 1
Respuesta: Cadenas y Listas en C++

Cita:
Iniciado por Wikipedia

void bubble(int A[], int tamano_arreglo)
{
int temp, j, i;

for(i = (tamano_arreglo-1); i >= 0; i--)
{
for(j = 1; j <= i; j++)
{
{
/* Intercambio de numeros*/
temp = A[j-1];
A[j-1] = A[j];
A[j] = temp;
}
}
}
}
Bueno! este es el codigo que haremos servir, quitado de Wikipedia en el enclase que te dije en el Ejemplo 2.

Como ves, la funcion acepta 2 parametros, el primero el array, y el segundo el tamaño del array. Vamos explicar paso a paso lo que hace este programa:

Primer Paso:
Código:
int temp, j, i;
Lo que hace es hacer 3 variables enteras podria escribirse tambien asi :

Código:
int temp;
int j;
int i;
Segundo Paso:

Código:
for(i = (tamano_arreglo-1); i >= 0; i--)
Esto es un bucle, una palabra clave del C/C++ que lo que hace es repetir lo que hay entre los bloques {} , y tiene tres parametros, separados por ;, el primer parametro, inicializa la variable ( en este caso, tamano_arreglo - 1 ), el segundo parametro se puede 'demostrar' asi, "Si i es mas grande o igual a 0", si esta condicion se cumple, entra en el bloque {, hace todo lo que tiene que hacer hasta que acaba con }, y despues se activa el tercer parametro, que lo que hace es incrementar, disminuir, cualquier variable en este caso i, despues se vuelve a preguntar lo siguiente "Si i es mas grande o igual a 0", hasta que la condicion no se cumple. Si has utilizado el bucle ''while'' es practicamente lo mismo, la unica diferencia esque solo tiene un parametro, y no puedes inicializar la variable dentro de ella, la tienes que inicializar a fuera.

Paso Tres:

Código:
for(j = 1; j <= i; j++)
Hace igual que lo de arriba, lo unico que cambia son las variables, y si te fijas hay un for dentro del for, como es logico, primero se tiene que acabar el for que hay dentro, para poder hacer el for que hay arriba, despues la j volveria a tener el valor 1.

Paso 4:

Código:
if(A[j-1] > A[j])
La palabra reservada if, es una condicion, que simplemente, si se cumple entra y si no, no entra. Este ejemplo lo podemos demostrar asi: "Si A en la posicion j-1 es mas grande que A en la posicion j", Si se cumple, entra. Si te fijas el como el parametro dos del for, lo unico que aqui no repite nada, solo se pregunta una condicion

Paso 5:

Código:
/* Intercambio de numeros*/
temp = A[j-1];
A[j-1] = A[j];
A[j] = temp;
Empieza el intercambio de valores!, ahora voy a decir lo que hace el codigo de arriba:
el valor A de la posicion j-1, se guarda en una variable temporal ( temp ), para poder conservar el valor, despues el valor de A en la posicion j, pasa en A en la posicion j-1, despues la variable temporal, pasa el valor a A en la posicion j. Ejemplo con numeros reales:

temp = A[5]; // Temporal tiene el valor de A en la posicion 5
A[5] = A[6]; // A[6] pasa su valor a A[5].
A[6] = temp; // A[6], tiene un nuevo valor, el valor de temp.


Despues el ultimo codigo, se volveria a repetir hasta que j no se mas pequeño o igual que i. Si j no es mas pequeño o igual que i, se haria el for ''jefe'', y asi sucesivamente hasta que la condicion del for "jefe" no se cumpla.

Saludos! Espero que me haya explicado bien, y si no comentame!