javascript - 如何在循环中获得正确的二进制数组以可视化冒泡排序?
问题描述
我试图用 JS 可视化冒泡排序。我使用二进制数组来保存每个更改的数组。但是在二进制数组中,我只得到已排序的数组。
var arr = [1, 5, 3, 7, 2];
var newArray = [];
for (var i = 0; i < arr.length - 1; i++) {
for (var j = 0; j < arr.length - 1 - i; j++) {
if (arr[j] > arr[j + 1]) {
arr[j] = arr[j] + arr[j + 1];
arr[j + 1] = arr[j] - arr[j + 1];
arr[j] = arr[j] - arr[j + 1];
console.log(arr);
newArray.push(arr);
}
}
}
我不明白为什么当我控制台 arr[] 时我在循环中得到正确的结果,但是 newArray 是 [1, 2, 3, 5, 7],[1, 2, 3, 5, 7],[ 1、2、3、5、7]、[1、2、3、5、7]。
为什么在同一范围内控制台和推送功能会得到不同的结果?
我怎样才能得到正确的二进制数组?
我是新手,对此完全感到困惑。有人知道原因吗?谢谢
解决方案
我并不完全清楚您到底要做什么,但我认为您的想法是newArray
在排序的每一步都包含数组的快照。您的代码不起作用,因为您在每一步都将相同的数组推入。newArray
您需要在每一步制作当前的副本。arr
幸运的是,这可以通过以下方式轻松完成slice
:
var arr = [1,5,3,7,2];
var newArray = [];
for (var i = 0; i < arr.length - 1; i++) {
for (var j = 0; j < arr.length - 1 - i; j++) {
if (arr[j] > arr[j + 1]) {
arr[j] = arr[j] + arr[j+1];
arr[j+1] = arr[j] - arr[j+1];
arr[j] = arr[j] - arr[j+1];
//console.log(arr);
newArray.push(arr.slice(0,arr.length));
}
}
}
console.log(newArray);
console.log(arr);
现在newArray
是一个数组数组,其中包含排序的每个步骤的数组快照。
推荐阅读
- c# - 使用多个 where 语句和左连接创建一个 linq 查询
- java - 通知线程是否有可能获得锁并再次循环而不是等待线程
- assembly - 16 位 x86 寄存器如何存储数据?
- python - 如何显示不带引号并以逗号作为分隔符的 NumPy 字符串数组?
- javascript - 预期的半冒号 Ajax - Jquery
- c# - sendkeys 有时会输入错误的字符
- yii2 - Yii2:如何在andWhere和orWhere中使用优先级?
- bpmn - 如何对进出同一角色的多个实例的消息流进行建模?
- javascript - 如何在 React Native 应用程序和网站中实现位置的实时跟踪?
- tabulator - Postgres 数据库中的制表数据