Tomando en cuenta lo siguiente:
La función acepta dos argumentos a y b. El sort() método ordenará los elementos según el valor de retorno de la función con las siguientes reglas:
.
Si compare(a,b) es menor que cero, el sort()método ordena a a un índice más bajo que b. En otras palabras, avendrá primero.
Si compare(a,b)es mayor que cero, el sort()método ordena b a un índice más bajo que a, es decir, b vendrá primero.
Si compare(a,b)devuelve cero, el sort()método considera que a es igual a b y deja sus posiciones sin cambios.
.
Si quieres saber mas sobre como funciona el método sort:
Link: https://www.javascripttutorial.net/javascript-array-sort/
Mi codigo con cada una de las funciones a parte y en la consola me muestra cada uno de los resultados de cada tipo de resultado.
////Función para hallar el Promediofunctionaverage(array){console.log('Los datos que ingreso fueron: ',array)const suma= array.reduce((sum,item)=>item+sum,0);return averageResult=suma/(array.length)}/// Función para saber si es par o impar functionmedian(array){const number=(array.length)%2;if(number==0){//es parlet iUno=Math.floor((array.length/2));let iDos=Math.floor((array.length/2)+1);let resultmedian=average([iUno,iDos]);console.log('El resultado de la mediana es:',resultmedian )}else{//es imparlet iUno=Math.floor((array.length/2));let iDos=Math.floor((array.length/2)-1);let resultmedian=average([iUno,iDos]);console.log('El resultado de la mediana es:',resultmedian )}};median([1,2,3,4,5,6,7]);
Hice el ejercicio con un input para que el usuario ingrese los valores que quiera (valida si son números), y dos botones, uno para agregar números y otro para realizar el cálculo.
Imprimimos en el DOM:
Los valores agregados.
Los valores agregados en orden ascendente
La media calculada si es par o impar.
El codigo JS queda así:
const numsMedia =[];const btnAddMedia =document.querySelector('.addMedia');const btnCalcularMedia =document.querySelector('.calcularMedia');const resultadoMedia =document.querySelector('.resultadoMedia');btnAddMedia.addEventListener('click',function(){const inputNumsMedia =document.querySelector('#numsMedia');const nums =Number(inputNumsMedia.value);if(!isNaN(nums)){ numsMedia.push(nums); inputNumsMedia.value='';// Limpiar el campo de entrada}});btnCalcularMedia.addEventListener('click',function(){if(numsMedia.length===0){ resultadoMedia.innerText='No hay números para calcular la media.';return;}const sortedNums =[...numsMedia].sort((a, b)=> a - b);const mediana =calcularMediana(sortedNums); resultadoMedia.innerText=`Valores: ${numsMedia.join(', ')}Valores ordenados: ${sortedNums.join(', ')}Mediana: ${mediana}`;});functioncalcularMediana(nums){const mitad =Math.floor(nums.length/2);if(nums.length%2===1){return nums[mitad];}else{return(nums[mitad -1]+ nums[mitad])/2;}}
El código HTML queda así:
<section class="media"><h3>Calculadora de Media</h3><label for="numsMedia">Ingresa los valores para obtener la Media</label><input type="number" id="numsMedia"><button type="submit"class="addMedia">Agregar</button><button type="submit"class="calcularMedia">Calcular</button><h4>Resultado</h4><p class="resultadoMedia"></p></section>
Asi fue como lo hice, ya que tenia en una sola función el identificar si al lista era par o impar.-
Mi solucion:
functionesPar(lista){return lista.length%2===0;}functioncalcularMediana(lista){//Acomoda los numeros de menor a mayorconst listaOrdenada =[...lista].sort((a,b)=>a-b);if(esPar(lista)){const inicioListaPar = listaOrdenada[(listaOrdenada.length/2)-1];const finalListaPar = listaOrdenada[(listaOrdenada.length/2)];const promedioListaPar =(listaOrdenada[inicioListaPar]+listaOrdenada[finalListaPar])/2;return promedioListaPar;}else{const medioListaPar =Math.floor(listaOrdenada.length/2);return listaOrdenada[medioListaPar];}}
functioncalcularMediana(lista){// Primero, ordenamos la lista lista.sort(function(a, b){return a - b;});// Obtenemos la longitud de la listavar longitud = lista.length;// Calculamos la posición del valor centralvar mitad =Math.floor(longitud /2);// Si la lista tiene un número impar de elementos, la mediana es el valor centralif(longitud %2!==0){return lista[mitad];}// Si la lista tiene un número par de elementos, la mediana es la media aritmética de los dos valores centraleselse{return(lista[mitad -1]+ lista[mitad])/2;}}
Mi solución
'use strict';const numbers =[12,56,56,78,23,56,12,23,24,71,55,20,41,46]const numbers2 =[9,10,12,3,1,6,8]functionaverage(array){const sum = array.reduce((accumulator, currentValue)=> accumulator + currentValue
)const average = sum / array.lengthreturn average
}average(numbers)// 44.13average(numbers2)// 3// saber si un array es par o noconstisEven=array=> array.length%2==0?true:falseisEven(numbers)functionmediana(array){let median
const arrayB = array.sort((a, b)=> a - b);if(isEven(array)){const index1 = arrayB.length/2;const index2 =(arrayB.length/2)-1;const list =[arrayB[index1], arrayB[index2]] median =average(list)}else{let indexMediana =Math.floor(arrayB.length/2); median = arrayB[indexMediana]}console.log(arrayB);console.log(median);}mediana(numbers)mediana(numbers2)
creo que existe el método sort en javaScript, pero me dieron ganas de aplicar el método de ordenamiento por inserción.
let desordenedList =[5,7,6,2,9,1,8,2,3];constinsertionSort=(arr)=>{let position =0;let aux ;for(let i =0; i < arr.length; i++){ position = i; aux = arr[i];while((aux < arr[position-1])&&(position >0)){ arr[position]= arr[position-1]; position--;} arr[position]= aux;}return arr;}console.log(insertionSort(desordenedList));
Aca mi Solucion :
Saludos 👋
Llegue al mismo metodo que todos pero encontre algo copado para agilizarlo un en futuras funciones que necesitemos ordenar un array de numeros.
Si al inicio de nuestro seteamos esto
Array.prototype.sortNormal=function(){returnthis.sort(function(a,b){return a - b})}
De ahi en adelante ya no tenemos que reescribir una y otra vez esta funcionan para hacer sort con numeros, los llamamos de la siguiente manera