Ordenar array con Bubble Sort en Javascript [SOLUCIONADO]

### El método de la burbuja para organizar colecciones en JavaScript

Cuando trabajamos con colecciones de datos en el mundo de la programación, especialmente en lenguajes como **JavaScript**, uno de los algoritmos más simples y conocidos para la **ordenación de elementos** es el algoritmo Bubble Sort, también conocido como **método de la burbuja** o **sorteo de burbuja**. Este algoritmo tiene una implementación bastante intuitiva y se basa en la comparación de elementos adyacentes dentro de un arreglo para ir ordenándolos de manera secuencial.

#### Entendiendo el funcionamiento del método de la burbuja

El funcionamiento del **Bubble Sort** puede describirse de la siguiente manera:

1. Se compara el primer elemento del arreglo con el siguiente (posición 0 con posición 1).
2. Si el primer elemento es mayor que el segundo, se intercambian sus posiciones.
3. Se avanza un elemento y se repite la comparación hasta haber recorrido todo el arreglo.
4. Estos pasos constituyen una “pasada” completa sobre el arreglo.
5. Se repiten las pasadas sobre el arreglo hasta que no se necesiten hacer más intercambios, lo que indica que el arreglo está ordenado.

Una característica del métodode la burbuja es su eficiencia en arreglos ya ordenados o casi ordenados, aunque no es el más eficiente para colecciones de datos grandes o desordenadas, ya que su complejidad temporal es de **O(n^2)** en el peor de los casos.

#### Implementación en código

Vamos a dar paso a la implementación del **Bubble Sort** en **JavaScript**, explicando cada parte del proceso. A continuación, el código:

function bubbleSort(arr) {
    let n = arr.length;
    let swapped;
    do {
        swapped = false;
        for (let i = 1; i < n; i++) {
            if (arr[i - 1] > arr[i]) {
                let temp = arr[i - 1];
                arr[i - 1] = arr[i];
                arr[i] = temp;
                swapped = true;
            }
        }
    } while (swapped);
    return arr;
}

// Ejemplo de uso del bubbleSort:
const arrNumeros = [64, 34, 25, 12, 22, 11, 90];
console.log('Array Original:', arrNumeros);
console.log('Array Ordenado:', bubbleSort(arrNumeros));

Como se observa en el código anterior, hemos creado una **función** llamada `bubbleSort` que recibe como parámetro un arreglo `(arr)` el cual queremos ordenar. La función aplica el **Bubble Sort** para organizar los elementos de menor a mayor.

Dentro de la función, inicializamos una variable `n` con la longitud del arreglo y una variable `swapped` que utilizamos para seguir pista de si ha habido algún intercambio durante cada pasada y así saber cuándo el arreglo se encuentra ordenado y se puede terminar el bucle `do…while`. El uso de un bucle `do…while` nos asegura que se realice al menos una pasada completa sobre el arreglo.

La estructura `for` se utiliza para iterar sobre los elementos del arreglo y hacer las comparaciones necesarias. Cuando se encuentra que un elemento es mayor que el siguiente (`arr[i – 1] > arr[i]`), se realiza un intercambio utilizando una variable temporal `temp`. Si ocurre un intercambio, marcamos `swapped` como verdadero, lo que significa que se necesitará al menos una pasada adicional.

El código finaliza devolviendo el arreglo ya **ordenado**. Acompañamos la función de un ejemplo de su uso, donde se definen algunos números desordenados y se muestra cómo queda el arreglo después de aplicar la **función de ordenación**.

#### Ventajas y limitaciones del Bubble Sort

El método de la burbuja es fácil de implementar y entender, lo cual lo hace muy atractivo para quienes están **aprendiendo a programar** o necesitan una solución simple y directa para arreglos no muy grandes y relativamente ordenados. Además, este algoritmo es estable, lo que significa que mantiene el orden relativo de elementos iguales, una característica importante en ciertas aplicaciones.

Sin embargo, debido a su naturaleza cuadrática, el **Bubble Sort** no es adecuado para colecciones de datos que sean muy extensas o que se encuentren demasiado desordenadas. En tales situaciones, los programadores suelen recurrir a algoritmos de ordenación más avanzados y eficientes, como QuickSort, MergeSort o HeapSort, que ofrecen mejores tiempos de ejecución en casos promedios y en el peor de los casos.

#### Optimizaciones posibles

Aunque el **Bubble Sort** no es el algoritmo más rápido, existen algunas optimizaciones que se pueden aplicar para mejorar su rendimiento. Una de ellas consiste en reducir el número de elementos a comprobar en cada pasada, ya que después de cada pasada el mayor elemento queda en su posición final y no necesita ser comparado nuevamente. Esto se logra modificando la variable `n` después de cada pasada:

function optimizedBubbleSort(arr) {
    let n = arr.length;
    do {
        let newN = 0;
        for (let i = 1; i < n; i++) {
            if (arr[i - 1] > arr[i]) {
                let temp = arr[i - 1];
                arr[i - 1] = arr[i];
                arr[i] = temp;
                newN = i;
            }
        }
        n = newN;
    } while (n !== 0);
    return arr;
}

En la versión optimizada, establecemos la variable `newN` para mantener la posición del último intercambio ocurrido, lo que nos permite disminuir el tamaño de la siguiente pasada.

#### Diagnóstico del rendimiento

Para entender realmente la eficiencia del **Bubble Sort**, es útil realizar pruebas de rendimiento (benchmarking) comparándolo con otros algoritmos de ordenación. En la práctica, estas pruebas pueden revelar cuánto demora en ordenar arreglos de diferentes tamaños y cómo se compara con alternativas más eficientes. Herramientas de perfilado (profiling) y cronometraje (como `console.time` en JavaScript) pueden ser aliadas valiosas en esta tarea.

En resumen, el método de la burbuja ofrece una forma básica y educativa de abordar el problema de **ordenar elementos** en un arreglo, siendo un buen punto de partida para comprender otros algoritmos de ordenación más complejos y eficientes. Es esencial que, como desarrolladores, sepamos elegir la herramienta más adecuada para cada situación, optimizando el rendimiento de nuestras aplicaciones y mejorando nuestra destreza técnica.

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Más información
Privacidad