Ordenamiento burbuja
Ordena números al azar intercambiando vecinos, y se detiene apenas quedan ordenados.
- Nivel
- Intermedio
- Conceptos:
- Entrada y salida
- Arreglos
- Para
- Mientras
- Si
- Lógicos
- Azar
- SubProcesos
Ejecuta, modifica y depura este ejemplo en el navegador.
Lo que aprenderás
En cada pasada se comparan los vecinos y se intercambian si están al revés, así el mayor "sube" hasta el final. Si una pasada no hace ningún cambio, ya está todo ordenado y el Mientras termina antes. Por eso cuesta O(n) si los datos ya venían ordenados y O(n²) en el caso promedio y en el peor.
Código
// Muestra el arreglo completo solo si es corto (30 o menos)SubProceso MostrarDatos(titulo, datos, n) Definir i Como Entero Si n <= 30 Entonces Escribir Sin Saltar titulo Para i <- 1 Hasta n Hacer Escribir Sin Saltar datos[i], " " FinPara Escribir "" SiNo Escribir titulo, n, " números (el primero es ", datos[1], " y el último ", datos[n], ")" FinSiFinSubProcesoAlgoritmo OrdenamientoBurbuja Definir datos, n, i, j, aux, pasadas Como Entero Definir huboCambios Como Logico Escribir "¿Cuántos números quieres ordenar? (1 a 512)" Leer n Dimension datos[n] Para i <- 1 Hasta n Hacer datos[i] <- Aleatorio(1, 99) FinPara MostrarDatos("Antes: ", datos, n) // En cada pasada, el mayor "sube" hasta su lugar al final pasadas <- 0 huboCambios <- Verdadero Mientras huboCambios Y pasadas < n - 1 Hacer pasadas <- pasadas + 1 huboCambios <- Falso Para j <- 1 Hasta n - pasadas Hacer Si datos[j] > datos[j + 1] Entonces aux <- datos[j] datos[j] <- datos[j + 1] datos[j + 1] <- aux huboCambios <- Verdadero FinSi FinPara // Si una pasada no cambió nada, el arreglo ya está ordenado FinMientras MostrarDatos("Después: ", datos, n) Escribir "Pasadas necesarias: ", pasadasFinAlgoritmoDiagrama de flujo
Cada bloque del diagrama corresponde a una instrucción del código.
Ejemplo de ejecución
Esto muestra el programa al ejecutarlo. Las respuestas escritas por el usuario aparecen resaltadas.
¿Cuántos números quieres ordenar? (1 a 512)Respuesta del usuario: 12Antes: 18 31 82 57 10 74 26 85 29 44 60 91 Después: 10 18 26 29 31 44 57 60 74 82 85 91 Pasadas necesarias: 6
Complejidad
Cuánto trabajo y memoria necesita según la cantidad de datos (n).
| Caso | Costo |
|---|---|
| Mejor | O(n) |
| Promedio | O(n²) |
| Peor | O(n²) |
| Memoria | O(1) |
Características:EstableEn el lugar
Desafío
Ordena los números de mayor a menor.
Ver pista
Basta con cambiar el operador de comparación dentro del Si.
Ejemplos relacionados
Ordenamiento por inserción
Inserta cada número entre los ya ordenados, como al acomodar cartas en la mano.
IntermedioOrdenamiento Shell
Una inserción entre elementos lejanos, con un salto que se achica en cada pasada.
AvanzadoOrdenamiento por montículo
Organiza el arreglo como un montículo y saca el mayor una y otra vez.
Avanzado