DevPath · Aprende a programar ESPTEN

Algoritmos y complejidad

Ordenación y recursión

Ordenación

Bubble sort — O(n²)

El más sencillo de entender: compara pares adyacentes y los intercambia si están en el orden incorrecto, repitiendo hasta que no haya cambios.

function bubbleSort(arr) {
  const a = [...arr];
  for (let i = 0; i < a.length; i++) {
    for (let j = 0; j < a.length - 1 - i; j++) {
      if (a[j] > a[j + 1]) {
        [a[j], a[j + 1]] = [a[j + 1], a[j]];
      }
    }
  }
  return a;
}

Merge sort y quick sort — O(n log n)

Para datos grandes se usan algoritmos divide y vencerás:

Ambos son mucho más rápidos que bubble sort para entradas grandes. En la práctica, Array.prototype.sort() ya usa un algoritmo eficiente.

Recursión

Una función recursiva se llama a sí misma con un problema más pequeño hasta llegar a un caso base.

function factorial(n) {
  if (n <= 1) return 1;       // caso base
  return n * factorial(n - 1); // caso recursivo
}

function fibonacci(n) {
  if (n < 2) return n;
  return fibonacci(n - 1) + fibonacci(n - 2);
}

El fibonacci recursivo ingenuo es O(2ⁿ): recalcula los mismos valores una y otra vez. Se puede optimizar con memorización o con un bucle.

Ejemplos

Bubble sort con traza

function bubbleSort(arr) {
  const a = [...arr];
  for (let i = 0; i < a.length; i++) {
    for (let j = 0; j < a.length - 1 - i; j++) {
      if (a[j] > a[j + 1]) [a[j], a[j + 1]] = [a[j + 1], a[j]];
    }
  }
  return a;
}
console.log(bubbleSort([5, 2, 8, 1, 9, 3]));

Factorial recursivo

function factorial(n) {
  if (n <= 1) return 1;
  return n * factorial(n - 1);
}
console.log("5! =", factorial(5));
Pon esto en práctica

DevPath es un curso práctico: aquí lees la teoría; en la app la pones en práctica con ejercicios que se ejecutan de verdad, sin conexión.

Empezar gratis en la app →
← Búsqueda lineal y binariaMerge sort en detalle →