Algoritmos de ordenamiento: cómo elegir entre Bubble, Merge, Quick, Heap y Radix

Guía práctica para comparar métodos de ordenamiento por estabilidad, memoria, complejidad, tipo de datos y costo real antes de elegir uno.

11 min

Sorting poster showing unordered nodes becoming an ordered sequence

Ordenar no es solo acomodar valores. El orden puede habilitar búsqueda binaria, agrupar registros, construir rankings o preparar una interfaz para que el usuario entienda los datos.

La decisión correcta no empieza por memorizar nombres. Empieza por cinco preguntas: cuánto mide la colección, cuánto orden previo tiene, si los empates deben conservarse, cuánta memoria puedes usar y qué propiedades tiene el dominio.

No elijas el algoritmo con la mejor fila aislada; elige el que sostiene las garantías que tu producto necesita.

01. Primero define qué significa “mejor”

Dos algoritmos con O(n log n) pueden comportarse de forma distinta. Uno puede ser estable, otro usar menos memoria y otro responder mejor a la localidad de caché. Antes de comparar nombres, fija el criterio dominante:

Si necesitas principalmente…Primera opción para estudiarRazón
una lista pequeña o casi ordenadaInsertion Sortaprovecha el orden existente y tiene poco overhead
estabilidad predecibleMerge Sortconserva el orden relativo de los empates
buen rendimiento general en memoriaQuick Sort bien implementadoparticiona in-place y suele tener buena localidad
peor caso O(n log n) con poco espacio auxiliarHeap Sortmantiene una garantía defensiva
enteros en un rango pequeñoCounting Sortusa el dominio en lugar de comparar cada par
claves separables en dígitos o segmentosRadix Sortprocesa la clave por posiciones

Flujo de decisión para elegir un algoritmo de ordenamiento según las restricciones de los datosFlujo de decisión para elegir un algoritmo de ordenamiento según las restricciones de los datos

Estabilidad significa que dos registros con la misma clave conservan su orden relativo. Si primero ordenas personas por nombre y después, con un método estable, por equipo, los nombres seguirán ordenados dentro de cada equipo. Esa garantía importa en tablas, reportes y ordenamientos encadenados.

Comparación visual entre un ordenamiento estable y uno inestableComparación visual entre un ordenamiento estable y uno inestable

También importa si el algoritmo es adaptativo: Insertion Sort se acerca a O(n) cuando la lista ya está casi ordenada porque realiza pocos desplazamientos. Un algoritmo no adaptativo no obtiene automáticamente esa ventaja.

02. La tabla que realmente debes leer

Los algoritmos basados solo en comparaciones tienen un límite: en el caso general necesitan al menos Ω(n log n) comparaciones. Por eso Merge, Quick y Heap Sort convergen alrededor de esa escala. Counting y Radix pueden superarla porque usan información adicional sobre el dominio.

MétodoMejorPromedioPeorEspacio auxiliarEstable
Insertion SortO(n)O(n²)O(n²)O(1)
Merge SortO(n log n)O(n log n)O(n log n)O(n)
Quick SortO(n log n)O(n log n)O(n²)O(log n) esperado por recursiónno, normalmente
Heap SortO(n log n)O(n log n)O(n log n)O(1)no
Counting SortO(n + k)O(n + k)O(n + k)O(n + k) en versión establepuede serlo
Radix SortO(d(n + k))O(d(n + k))O(d(n + k))depende del método por dígitosí, con pasos estables

Aquí k es el rango o número de buckets y d la cantidad de posiciones procesadas. Esos parámetros evitan llamar “lineal” a un algoritmo sin explicar de qué depende.

Big O tampoco describe constantes, acceso a memoria, costo del comparador ni asignaciones. Una tabla te da el mapa; una medición con datos representativos decide el camino.

03. Métodos simples: aprende con Bubble, trabaja con Insertion

Bubble, Selection e Insertion Sort comparten un peor caso cuadrático, pero no ofrecen lo mismo:

  • Bubble Sort hace visibles los intercambios entre vecinos. Es pedagógico, no una opción general de producción.
  • Selection Sort realiza pocos swaps —como máximo uno por posición—, pero siempre busca el siguiente mínimo y no suele ser estable.
  • Insertion Sort desplaza una zona ordenada y aprovecha listas pequeñas o casi ordenadas. Por eso aparece como componente de algoritmos híbridos.

Una implementación directa deja visible su ventaja adaptativa:

ts
function insertionSort(values: number[]) {
  for (let i = 1; i < values.length; i += 1) {
    const current = values[i];
    let j = i - 1;

    while (j >= 0 && values[j] > current) {
      values[j + 1] = values[j];
      j -= 1;
    }

    values[j + 1] = current;
  }

  return values;
}

Si cada elemento ya está cerca de su posición, el while trabaja poco. Si la lista llega en orden inverso, los desplazamientos crecen hasta O(n²).

04. Merge, Quick y Heap: el mismo orden, tradeoffs distintos

Los tres pertenecen al mundo general de O(n log n), pero resuelven prioridades diferentes.

Merge Sort: estabilidad y previsibilidad

Divide, ordena cada mitad y mezcla resultados. Su tiempo no depende de encontrar un buen pivote y es naturalmente estable si, ante un empate, toma primero el elemento de la izquierda. El costo habitual es un buffer auxiliar O(n) para arrays.

También encaja bien con listas enlazadas y ordenamiento externo, donde los datos no caben completos en memoria y se mezclan bloques desde almacenamiento.

Quick Sort: partición y buen comportamiento promedio

Elige un pivote, separa menores y mayores y repite sobre cada partición. Sus ventajas prácticas vienen de la localidad de memoria y el bajo overhead, no de una garantía absoluta. Un pivote sistemáticamente malo puede producir particiones 0 y n - 1, llevando el tiempo a O(n²) y profundizando la recursión.

Aleatorizar el pivote, usar median-of-three o cambiar a otro método cuando la recursión crece reduce ese riesgo. Una implementación industrial suele ser híbrida; no asumas que la función estándar de un lenguaje usa Quick Sort puro.

Heap Sort: una garantía defensiva

Convierte el array en un heap y extrae repetidamente el máximo o mínimo. Mantiene O(n log n) incluso en el peor caso y puede trabajar con O(1) espacio auxiliar. A cambio, no es estable y suele tener peor localidad de memoria que Quick Sort.

La decisión resumida es: Merge para estabilidad, Quick para buen promedio práctico y Heap cuando la garantía de peor caso y el espacio controlado pesan más.

Comparación visual de las mecánicas de Merge Sort, Quick Sort y Heap SortComparación visual de las mecánicas de Merge Sort, Quick Sort y Heap Sort

05. Cuando el dominio permite dejar de comparar

Counting, Radix y Bucket Sort no son reemplazos universales. Funcionan porque conocen algo que los métodos por comparación no conocen.

MétodoSupuesto que aprovechaCosto relevanteSeñal de peligro
Counting Sortclaves enteras entre 0 y kO(n + k)k es enorme frente a n
Radix Sortclaves con d posicionesO(d(n + k))dígitos variables o paso interno inestable
Bucket Sortdistribución razonablemente uniformepromedio cercano a O(n + k)un bucket concentra casi todos los datos

Comparación técnica de Counting Sort, Radix Sort y Bucket SortComparación técnica de Counting Sort, Radix Sort y Bucket Sort

Ordenar diez millones de edades entre 0 y 120 es un escenario razonable para Counting Sort. Ordenar diez millones de IDs dispersos entre 0 y 10¹⁵ no lo es: el rango destruiría la ventaja de memoria.

Radix Sort necesita que cada pasada por dígito sea estable para conservar el trabajo anterior. Bucket Sort necesita además una estrategia para ordenar dentro de cada bucket; su rendimiento depende de la distribución, no solo de la cantidad de elementos.

06. Decisión práctica y realidad de JavaScript

En un producto, empieza por la implementación estándar del lenguaje. Suele estar probada, optimizada y combinar estrategias según el tamaño o la forma de la entrada. Cambia de enfoque cuando una garantía o una medición lo justifique.

En JavaScript moderno:

ts
const users = [
  { name: "Ana", score: 20 },
  { name: "Luis", score: 10 },
  { name: "Mara", score: 20 },
];

const ranked = users.toSorted((a, b) => b.score - a.score);

sort() modifica el array original; toSorted() devuelve una copia. Ambos necesitan un comparador para ordenar números u objetos con la intención correcta. El ordenamiento estándar es estable, por lo que Ana permanece antes que Mara cuando comparten puntuación.

Antes de implementar tu propio algoritmo, responde:

  1. ¿La colección es pequeña, grande o casi ordenada?
  2. ¿Los empates deben conservar su orden?
  3. ¿Importa más el promedio, el peor caso o la memoria?
  4. ¿El dominio tiene un rango o formato aprovechable?
  5. ¿Ordenas una vez o repites la operación en una ruta crítica?
  6. ¿Tus datos reales confirman la ventaja esperada?

Para aprender, implementa Insertion, Merge y Quick Sort. Para producción, usa primero la herramienta estándar y mide. Para restricciones especiales, elige la familia cuya garantía coincide con el problema, no la que tenga el nombre más sofisticado.


SESSION_ELAPSED00:00:00
LOCALE: ESENV: PROD