La fila del patio
El profesor de gimnasia quiere a toda la clase en fila, del más bajo al más alto.
No mira a todos a la vez. Compara a dos vecinos. Si el de la izquierda es más alto, los cambia de sitio.
Repite eso hasta que nadie tenga que cambiar. Un programa ordena una lista igual.
Palabras clave
| Palabra | Qué significa | Ejemplo |
|---|---|---|
| Ordenar | Poner los valores de menor a mayor, o al revés. | {1, 3, 4, 5, 8} |
| Intercambiar | Cambiar de sitio los valores de dos cajas. | swap(values, 0, 1) |
| Variable temporal | Una caja de ayuda para no perder un valor mientras intercambias. | int temporary |
| Burbuja | Un método de ordenar: compara vecinos y los cambia si están al revés. | el valor grande sube |
| Pasada | Cada vez que recorres el array comparando vecinos. | la pasada 2 |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Cambiar dos valores de sitio
Tienes un vaso de agua y otro de zumo. Quieres que cada uno esté en el vaso del otro.
Si viertes uno en el otro, se mezclan. Necesitas un tercer vaso vacío.
En Java, el tercer vaso es una variable temporal. Guarda un valor mientras haces el cambio.
Sin él, el primer valor se pisa y se pierde.
Pruébalo: intercambiar dos cajas
public class Main {
public static void main(String[] args) {
int[] values = {5, 3};
// Primero guardamos el 5 en el tercer vaso.
int temporary = values[0];
values[0] = values[1];
values[1] = temporary;
System.out.println(values[0] + " " + values[1]);
// Quita la línea de temporary y mira qué pasa.
}
}
El método de la burbuja
Recorres el array comparando cada caja con la siguiente. Si están al revés, las intercambias.
Así, en cada pasada, el valor más grande sube hasta el final, como una burbuja. Después de la primera pasada, el último ya está en su sitio.
Repites con las cajas que quedan.
Ejemplo resuelto: ordenar 5, 3, 8, 1, 4
| Pasada | Cambios que se hacen | Cómo queda el array |
|---|---|---|
| Antes de empezar | - | 5 3 8 1 4 |
| 1 | 5 y 3, 8 y 1, 8 y 4 | 3 5 1 4 8 |
| 2 | 5 y 1, 5 y 4 | 3 1 4 5 8 |
| 3 | 3 y 1 | 1 3 4 5 8 |
| 4 | Ninguno: ya está ordenado | 1 3 4 5 8 |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Dos bucles anidados
El bucle de fuera cuenta las pasadas. El de dentro compara vecinos.
En cada pasada el último valor ya está bien puesto, así que el de dentro llega un poco menos lejos. Usamos values.length - pass como límite.
Para comparar vecinos usamos values[i] y values[i + 1].
Pruébalo: ordenar las notas
public class Main {
public static void main(String[] args) {
int[] marks = {5, 3, 8, 1, 4};
for (int pass = 1; pass < marks.length; pass++) {
for (int i = 0; i < marks.length - pass; i++) {
// Si están al revés, intercambiamos los vecinos.
if (marks[i] > marks[i + 1]) {
int temporary = marks[i];
marks[i] = marks[i + 1];
marks[i + 1] = temporary;
}
}
// Arrays.toString escribe el array entero de una vez.
System.out.println("Pasada " + pass + ": "
+ java.util.Arrays.toString(marks));
}
}
}
Para ordenar al revés
Consejo
Cambia solo la comparación: usa < en lugar de >. Entonces el valor más pequeño es el que sube al final. La lista queda de mayor a menor.
Repaso rápido
Inténtalo
Repaso rápido
3 preguntasTus respuestas se corrigen aquí y no se guardan. Una cuenta guarda tus resultados.