Por qué importa el algoritmo
Ordenar datos es una de las operaciones más frecuentes en programación: buscar más rápido, eliminar duplicados o mostrar resultados. Con 10 elementos cualquier método sirve, pero con un millón la diferencia es enorme: un algoritmo O(n²) hace del orden de 10¹² comparaciones, mientras que uno O(n log n) hace unos 2 × 10⁷.
Comparación
| Algoritmo | Promedio | Peor caso | Memoria extra | Estable |
|---|---|---|---|---|
| Burbuja | O(n²) | O(n²) | O(1) | Sí |
| Inserción | O(n²) | O(n²) | O(1) | Sí |
| Selección | O(n²) | O(n²) | O(1) | No |
| Merge sort | O(n log n) | O(n log n) | O(n) | Sí |
| Quicksort | O(n log n) | O(n²) | O(log n) | No |
“Estable” significa que los elementos iguales conservan su orden original, algo importante al ordenar por varias columnas.
Ejemplo: cuántas comparaciones
Burbuja sobre 32 elementos desordenados hace como máximo 32 × 31 / 2 = 496 comparaciones. Merge sort sobre los mismos datos hace a lo sumo unas n·log₂n ≈ 32 × 5 = 160. Ordena con ambos en la herramienta y compara los contadores. Prueba también inserción con datos casi ordenados: es casi lineal, por eso se usa dentro de algoritmos híbridos como Timsort, el de Python.
Errores comunes
- Elegir quicksort con el último elemento como pivote para datos ya ordenados: cae en su peor caso O(n²).
- Pensar que el algoritmo con menos comparaciones siempre es el más rápido: también influyen los accesos a memoria.
- Reinventar el ordenamiento: los lenguajes ya traen funciones optimizadas (sorted en Python, Array.prototype.sort en JavaScript).
Preguntas frecuentes
¿Qué significa O(n log n)?
Que el trabajo crece un poco más rápido que lineal: duplicar los datos algo más que duplica el tiempo, mientras que en O(n²) lo cuadruplica.
¿Cuál es el mejor algoritmo?
Depende de los datos y la memoria disponible; en la práctica se usan híbridos como Timsort o introsort.
¿Dónde lo programo?
En el Code Lab hay un ejemplo de burbuja en Python y JavaScript.
Herramienta educativa. Los resultados se calculan en tu navegador; ningún dato se envía a un servidor.