gpt4 book ai didi

javascript - 冒泡排序保存交换历史记录不起作用

转载 作者:行者123 更新时间:2023-11-28 03:32:28 25 4
gpt4 key购买 nike

使用 JavaScript 开发排序可视化工具。我似乎无法保存交换历史记录中每次迭代完成的交换,数组 swapHistory 会填充最终输出,但是如果我 console.log(output) 记录当前迭代?我对此感到非常困惑

bubbleSort = (input) => {
startTime = performance.now();
var output = input;
swapHistory = [];
swaps = 0;
let swap = false;
do {
swap = false;
output.forEach((current, i) => {
if (current > output[i + 1]) {
const temp = current;
console.log(current);
console.log(output[i + 1]);
console.log(output);
swapHistory.push(output);
output[i] = output[i + 1];
output[i + 1] = temp;
swaps++;
swap = true;
}
});
} while (swap);
endTime = performance.now();
timeTaken = endTime - startTime;
console.log(timeTaken);
setArray(output);
$("#timeTaken").html("Time taken: " + timeTaken.toFixed(4) + "ms");
};

期望 swapHistory 数组被交换的每次迭代填充

最佳答案

这是因为当您打算推送 output 的当前值时,您将 output 数组本身推送到 swapHistory 数组到swapHistory。本质上,当您想按值传递时,您就是按引用传递。

这里的简单修复方法是克隆 output 数组并将其保存在 swapHistory 中,而不是对 output 数组本身的引用。因此,将 swapHistory.push(output); 更改为 swapHistory.push(output.slice());,因为不带参数的切片只是克隆切片的快速方法数组。

关于javascript - 冒泡排序保存交换历史记录不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58050690/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com