Tengo una función para ordenar burbujas y quiero guardar la matriz después de cada intercambio en otra matriz. La ordenación de burbujas funciona correctamente y puedo registrar la matriz después de cada intercambio en la consola. Pero parece que no puedo empujar a la otra matriz correctamente.
Aquí está mi código:
var arr = [5, 4, 3, 2, 1]; var steps = []; function bubbleSort() { for (let i = 0; i < arr.length - 1; i++) { for (let j = 0; j < arr.length - i - 1; j++) { if (arr[j] > arr[j + 1]) { swap(arr, j, j + 1); } var temp = arr; console.log(temp); steps.push(temp); } } console.log(steps); } const swap = (a, x, y) => { var temp = a[x]; a[x] = a[y]; a[y] = temp; }; bubbleSort();Aquí hay una captura de pantalla de la consola:
captura de pantalla de la consola
¿Es solo cuando trato de obtener una retención de la matriz en cada paso que no se muestra correctamente? ¿Qué debo hacer?
Creo que clonar la matriz podría funcionar. var temperatura = [...arr];
var arr = [5, 4, 3, 2, 1]; var steps = []; function bubbleSort() { for (let i = 0; i < arr.length - 1; i++) { for (let j = 0; j < arr.length - i - 1; j++) { if (arr[j] > arr[j + 1]) { swap(arr, j, j + 1); } var temp = [...arr]; console.log(temp); steps.push(temp); } } console.log(steps); } const swap = (a, x, y) => { var temp = a[x]; a[x] = a[y]; a[y] = temp; }; bubbleSort();Está insertando la referencia de Temp-Array y no el contenido real. De esta manera, almacena varias veces la referencia y al final se le presentan todas esas referencias que apuntan a la última versión de su Temp Array.
Puede usar la asignación de desestructuración de una matriz para crear una copia superficial fácil de almacenar.
var arr = [5, 4, 3, 2, 1]; var steps = []; function bubbleSort() { for (let i = 0; i < arr.length - 1; i++) { for (let j = 0; j < arr.length - i - 1; j++) { if (arr[j] > arr[j + 1]) { swap(arr, j, j + 1); } var temp = arr; console.log(temp); // Changed to destructuring assignment steps.push([...temp]) } } console.log(steps); } const swap = (a, x, y) => { var temp = a[x]; a[x] = a[y]; a[y] = temp; }; bubbleSort();