
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
let tempArray = arrayDesordenado;
let 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
const primerNum = tempArray[key];
const 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
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
const primerNum: number = tempArray[key]
const 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
}
{{ comments.length }} comentarios