Saltar al contenido principal
Codigo Heroe
Tarea anterior
Arreglos21/26
A la lista de tareas
  1. 1. Visualizar datos en una gráfica
  2. 2. Calcular el promedio
  3. 3. Comparar el promedio con el valor esperado
  4. 4. Agregar nuevos datos
  5. 5. Crear un arreglo
  6. 6. Leer elementos de un arreglo
  7. 7. Usar una variable como índice
  8. 8. La longitud de un arreglo
  9. 9. Recorrer un arreglo con for
  10. 10. Sumar los elementos de un arreglo
  11. 11. Calcular el promedio de un arreglo
  12. 12. Filtrar valores con una condición
  13. 13. Escribir valores en un arreglo
  14. 14. Ajustar el umbral del filtro
  15. 15. Actualizar los datos del arreglo
  16. 16. Intercambiar elementos
  17. 17. Recorrer una parte del arreglo
  18. 18. Encontrar el valor mínimo
  19. 19. Colocar el mínimo en su posición
  20. 20. Repetir el ordenamiento
  21. 21. Ordenar con ciclos anidados
  22. 22. Probar el ordenamiento
  23. 23. Calcular la mediana: cantidad impar
  24. 24. Calcular la mediana: cantidad par
  25. 25. Combinar ordenamiento y mediana
  26. 26. Comparar la mediana con el promedio
Siguiente tarea
  • Matriz de skills
  • Cursos
  • Registro
  • Iniciar sesión

Loading…
En unos segundos, estará listo.

  • Teoría
  • Teoría

Ordenar con ciclos anidados

El programa ya ordena un arreglo de cuatro elementos. Es poco flexible: tendríamos que reescribirlo para arreglos de otro tamaño. Pero eso tiene solución, porque ya sabes refactorizar.

Hay mucho código repetido y lo único que cambia es currentIndex. ¿Cómo podemos mejorar la estructura?

Podemos tomar el bloque que busca el mínimo y lo coloca en la posición indicada, y envolverlo en otro ciclo. Ese ciclo exterior irá aumentando currentIndex.

Así es: podemos colocar un ciclo dentro de otro.

El ciclo exterior debe recorrer desde el índice cero hasta el penúltimo índice, usersByDay.length - 2. Recuerda que en el ejercicio anterior terminamos al llegar al penúltimo elemento: el último quedó automáticamente con el valor máximo.

Escribamos la condición del ciclo exterior de forma parecida a la del interior:

// Ciclo hasta el penúltimo elemento
currentIndex <= usersByDay.length - 2

// Ciclo hasta el último elemento
j <= usersByDay.length - 1

Después del segundo paso, el código todavía está en un estado intermedio: completa el tercer paso para terminar la refactorización.

  • script.js
JavaScript
let usersByDay = [4, 2, 1, 3]; console.log(usersByDay); // Inicia el ciclo aquí // Ordenamiento desde el primer elemento let currentIndex = 0; let minValue = usersByDay[currentIndex]; for (let j = currentIndex + 1; j <= usersByDay.length - 1; j++) { if (usersByDay[j] < minValue) { minValue = usersByDay[j]; let swap = usersByDay[currentIndex]; usersByDay[currentIndex] = minValue; usersByDay[j] = swap; console.log('Intercambio ' + swap + ' y ' + minValue); console.log('Arreglo actual: ' + usersByDay); } } console.log('En la posición ' + currentIndex + ' está el elemento mínimo ' + minValue); // Termina el ciclo aquí // Ordenamiento desde el segundo elemento console.log(usersByDay); currentIndex = 1; minValue = usersByDay[currentIndex]; for (let j = currentIndex + 1; j <= usersByDay.length - 1; j++) { if (usersByDay[j] < minValue) { minValue = usersByDay[j]; let swap = usersByDay[currentIndex]; usersByDay[currentIndex] = minValue; usersByDay[j] = swap; console.log('Intercambio ' + swap + ' y ' + minValue); console.log('Arreglo actual: ' + usersByDay); } } console.log('En la posición ' + currentIndex + ' está el elemento mínimo ' + minValue); // Ordenamiento desde el tercer elemento console.log(usersByDay); currentIndex = 2; minValue = usersByDay[currentIndex]; for (let j = currentIndex + 1; j <= usersByDay.length - 1; j++) { if (usersByDay[j] < minValue) { minValue = usersByDay[j]; let swap = usersByDay[currentIndex]; usersByDay[currentIndex] = minValue; usersByDay[j] = swap; console.log('Intercambio ' + swap + ' y ' + minValue); console.log('Arreglo actual: ' + usersByDay); } } console.log('En la posición ' + currentIndex + ' está el elemento mínimo ' + minValue);
Consola

El código ha cambiado, haga clic en "Ejecutar" o active la ejecución automática.

Resultado de la ejecución

ObjetivosRealizado
0
    1. Elimina todo el código que ordena a partir del segundo y del tercer elemento.
    2. Después, envuelve todo el código que está después de la segunda línea en un ciclo que recorra los valores de currentIndex desde cero hasta usersByDay.length - 2, ambos incluidos. El valor de currentIndex debe aumentar en uno después de cada iteración.
    3. Dentro de ese ciclo, elimina la declaración duplicada de currentIndex.
    Codigo Heroe

    © 2023-2026, codigoheroe.com