Inicio › Herramientas para desarrolladores › Visualizador de algoritmos de ordenamiento

Visualizador de algoritmos de ordenamiento

Observa cómo siete algoritmos de ordenamiento clásicos reorganizan un array barra a barra. Sigue la línea de pseudocódigo resaltada, cuenta comparaciones, intercambios y escrituras, ve paso a paso, o enfrenta los siete con los mismos datos para ver la complejidad Big-O en acción.

Última actualización:

Comparaciones0
Intercambios0
Escrituras0
Pasos0
EstadoListo
Usar mis propios números

Hasta 250 números enteros no negativos (de 0 a 9999), separados por comas o espacios.

Publicidad
Publicidad

Cómo usar Visualizador de algoritmos de ordenamiento

  1. Elige un algoritmo y el tipo de datos iniciales (aleatorios, casi ordenados, invertidos o pocos valores distintos).
  2. Ajusta el tamaño del array y la velocidad con los controles deslizantes. Los arrays pequeños muestran cada valor sobre su barra.
  3. Pulsa Iniciar para animar, Paso (o la flecha derecha) para avanzar una operación, o Terminar al instante para ver los recuentos finales.
  4. Síguelo en el panel de pseudocódigo: la línea actual se resalta y la frase de abajo explica la operación.
  5. Pulsa Carrera de todos los algoritmos para ejecutar cada algoritmo con el mismo array y comparar cuántos pasos necesita cada uno.

Chuleta de complejidad de los algoritmos de ordenamiento

AlgoritmoMejorMedioPeorEspacio extraEstableÚtil para
Bubble sortO(n)O(n²)O(n²)O(1)SíEnseñanza; detectar un array ya ordenado
Insertion sortO(n)O(n²)O(n²)O(1)SíArrays pequeños o casi ordenados, entrada en línea
Selection sortO(n²)O(n²)O(n²)O(1)NoMinimizar intercambios (como máximo n − 1)
Merge sortO(n log n)O(n log n)O(n log n)O(n)SíVelocidad garantizada, listas enlazadas, ordenamiento externo
Quick sortO(n log n)O(n log n)O(n²)O(log n)NoOrdenamiento rápido de uso general en memoria
Heap sortO(n log n)O(n log n)O(n log n)O(1)NoGarantía en el peor caso sin memoria extra
Radix sort (LSD)O(d·(n+b))O(d·(n+b))O(d·(n+b))O(n+b)SíEnteros o claves de longitud fija

n es el número de elementos, d el número de dígitos de la clave mayor y b la base (aquí 10). Cualquier ordenamiento que solo compare elementos necesita al menos unas log₂(n!) ≈ n·log₂(n) − 1.44n comparaciones en el peor caso, por eso O(n log n) es lo mejor que puede lograr un ordenamiento por comparación.

Experimentos que vale la pena probar

  • Datos casi ordenados: ejecuta insertion sort y bubble sort, y luego quick sort. Los algoritmos sencillos terminan en unos n pasos, mientras que quick sort con Lomuto cae en su peor caso.
  • Pocos valores distintos: radix sort necesita el mismo número de pasadas sea cual sea el orden, mientras que quick sort con este esquema de partición hace muchas comparaciones redundantes con claves duplicadas.
  • Cuenta los intercambios: selection sort hace como máximo n − 1 intercambios pero siempre n(n − 1)/2 comparaciones; bubble sort puede hacer hasta n(n − 1)/2 intercambios.
  • Duplica el tamaño: pasar de 50 a 100 elementos cuadruplica aproximadamente las comparaciones de los algoritmos O(n²), pero en merge y heap sort solo las duplica con algo más.

Preguntas frecuentes

¿Qué algoritmo de ordenamiento es el más rápido?

Para datos generales, los algoritmos O(n log n) como quick sort, merge sort y heap sort superan a los O(n²) como bubble, insertion y selection sort en cuanto los arrays tienen más de unas pocas decenas de elementos. Quick sort suele ser el más rápido en la práctica gracias a su partición en el sitio, que aprovecha bien la caché, pero su peor caso es O(n²). Insertion sort gana en arrays diminutos o casi ordenados, por eso los ordenamientos de las bibliotecas como Timsort e introsort recurren a él para los fragmentos pequeños.

¿Por qué quick sort se vuelve lento aquí con datos ordenados o invertidos?

Este visualizador usa la partición de Lomuto de los libros de texto, con el último elemento como pivote. Con datos ya ordenados o invertidos, ese pivote es siempre el valor menor o mayor, así que cada partición solo elimina un elemento y la ejecución requiere unas n²/2 comparaciones. Las bibliotecas reales lo evitan con pivotes aleatorios o con la mediana de tres.

¿Qué es un ordenamiento estable?

Un ordenamiento estable mantiene los elementos con claves iguales en su orden relativo original. Bubble, insertion, merge y radix sort son estables; selection, quick y heap sort no lo son. La estabilidad importa cuando ordenas por un campo y luego por otro, como ordenar por nombre y después por departamento.

¿Cómo puede radix sort no hacer ninguna comparación?

Radix sort nunca compara dos valores. Reparte los números en diez cubetas según un dígito cada vez, empezando por las unidades, mediante una pasada de conteo estable. Su tiempo de ejecución es O(d·(n + b)) para d dígitos y base b, así que con enteros de ancho fijo puede superar a los ordenamientos por comparación, cuyo límite inferior es de unas n·log₂(n) comparaciones.

¿Qué cuenta como un paso?

Un paso es una operación elemental: comparar dos elementos, intercambiar dos elementos, escribir un valor en el array o (en radix sort) leer un dígito. Un intercambio cuenta como dos escrituras en el array. Los pasos son lo que controla el deslizador de velocidad y lo que compara la carrera, así que reflejan el trabajo realizado y no el tiempo real en tu ordenador.

¿Qué significan los colores?

Las barras ámbar se están comparando o leyendo, las rojas se están intercambiando o escribiendo, el morado marca el pivote o la clave o el mínimo actual, y las barras verde oscuro han llegado a su posición final ordenada. En merge sort, la franja sombreada muestra la parte del array que se está fusionando.

¿Se prueban todas las herramientas de FreeToolCabin para comprobar su calidad y precisión?

Sí. Cada herramienta del sitio pasa pruebas automáticas en navegadores reales para comprobar que el resultado es correcto y que no hay errores. Si encuentras un fallo o tienes una sugerencia, escríbenos a [email protected] y lo revisaremos.

Herramientas relacionadas

Ver todas las de Entornos de prueba de código →