Estoy codificando en javascript y estoy tratando de hacer un algoritmo de clasificación, y mi ciclo while no parece salir, ¿alguien sabe por qué?
let sort = true let length = 0 let i = 1 function multiSort(n) { length = n.length-1 while (sort=true) { sort = false if (n[i]>n[i+1]) { [n[i],n[i+1] = n[i+1],n[i]] i += 1 sort=true if (i = length) { i = 1 } console.log(i) } } return n } console.log("Final Product: ", multiSort([3,2,5,1,4]), " Iterations: ", i)Tienes un par de problemas aquí.
Como se mencionó, está usando javascript incorrectamente. Debería dedicar algún tiempo a aprender cómo funcionan los operadores y las comparaciones. Usted puede leer acerca de ellos aquí. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Expressions_and_Operators#assignment_operators
n[i+1] en su declaración de comparación puede no estar definido, por lo que será falso cuando no deba verificarse.He reescrito su algoritmo usando un ciclo for en lugar de un ciclo while ya que obtenemos un iterador gratuito cuando configuramos el ciclo.
// We keep track of the iterations outside of the function let iterations = 0 function multiSort(n) { iterations++ // We set sort to false, if our conditions are not met we won't need to keep sorting let sort = false // Loop through every item in the array for(let i = 0; i < n.length; i++) { let next = n[i+1] // If the current item is larger than the next swap their positions. We also have to check for undefined here since the end of the array can't compare to anything. if(n[i] > next && next !== undefined) { // Set sort to true since at least one item need to be sorted. This will not be set if all items in the array are in sequence. sort = true n[i+1] = n[i] n[i] = next } } // If we set sort to true re-run everything with the current array. if(sort) { multiSort(n) } // return the final array return n } console.log("Final Product: ", multiSort([3,2,5,1,4]), " Iterations: ", iterations)