Javascript y Typescript, ordenar array con algoritmo por burbuja

2 minutos

Javascript

Por diferentes razones la funcion sort() de Javascript no funciona como debería con números, por ello debemos usar algún algoritmo sencillo que nos ayude a dejar nuestro array ordenado de manera ascendente (de menos a mas). Uno de las más rápido de implementar es el Algoritmo por burbuja, el cual compara por parejas e intercambia posiciones hasta completar todo el orden.

/**
 * Método que ordena un array numeral usando el algoritmo de ordenación por burbuja
 * @param arrayDesordenado - Array 
 * @return Array 
 */
function ordenarPorBurbuja(arrayDesordenado) {
    // Copia el array recibido
    var tempArray = arrayDesordenado;
    var volverAOrdenar = false;
    // Recorre el array
    tempArray.forEach(function (valor, key) {
        // Comprueba si el primero es mayor que el segundo y no esta en la última posición
        if (tempArray[key] > tempArray[key + 1] && tempArray.length - 1 != key) {
            // Intercambia la primera posición por la segunda
            var primerNum = tempArray[key];
            var segundoNum = tempArray[key + 1];
            tempArray[key] = segundoNum;
            tempArray[key + 1] = primerNum;
            // Si debe volver a ordenarlo
            volverAOrdenar = true;
        }
    });
    // Vuelve a llamar al función
    if (volverAOrdenar) {
        ordenarPorBurbuja(tempArray);
    }
    // Array ordenado
    return tempArray;
}
ordenarPorBurbuja([11, 6, 5, 1, 12, 14, 118, 2, 3]);
//[1, 2, 3, 5, 6, 11, 12, 14, 118] 

Typescript

Typescript

Como alternativa se puede reforzar tus tipos usando Typescript. Adaptarlo no es complejo y trae una mayor seguridad con el contenido de entrada y salida.

/**
 * Método que ordena un array numeral usando el algoritmo de ordenación por burbuja
 * @param arrayDesordenado - number[]
 * @return number[]
 */
function ordenarPorBurbuja(arrayDesordenado: number[]): number[] {
    // Copia el array recibido
    let tempArray: number[] = arrayDesordenado;
    let volverAOrdenar: boolean = false
    // Recorre el array
    tempArray.forEach(function (valor, key) {
        // Comprueba si el primero es mayor que el segundo y no esta en la última posición
        if (tempArray[key] > tempArray[key + 1] && tempArray.length - 1 != key) {
            // Intercambia la primera posición por la segunda
            let primerNum: number = tempArray[key]
            let segundoNum: number = tempArray[key + 1]
            tempArray[key] = segundoNum
            tempArray[key + 1] = primerNum
            // Si debe volver a ordenarlo
            volverAOrdenar = true
        }
    })
    // Vuelve a llamar al función
    if (volverAOrdenar) {
        ordenarPorBurbuja(tempArray)
    }
    // Array ordenado
    return tempArray
}

Comentarios

{{ comments.length }} comentarios

Nuevo comentario

Nueva replica  {{ formatEllipsisAuthor(replyComment.author) }}

Acepto la política de Protección de Datos.

Escribe el primer comentario

Tal vez también te interese...