小白想尝试一下使用JS实现一下基本的排序算法在尝试过程中觉得一下子出结果不便于理解过程所以就寻思着用一个数组来记录每次移动的结果然后就发现最终打印的用来记录的数组各项相等百思不得其解<script>//使用data数组记录每次交换//BUG:打印出的data数组的项一致,都是排序后的结果数组'use strict';const arr = [1,23,4,54,655,65,7,67,6,9,3,2,3,23,232,3];let data = [];function BubbleSort(arr) { 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); data.push(arr); } } } }function swap(arr, i, j) { let temp = arr[i]; arr[i] = arr[j]; arr[j] = temp;}BubbleSort(arr);console.log(data);</script>
1 回答
一只斗牛犬
TA贡献1784条经验 获得超2个赞
data.push(arr)改为data.push(arr.slice(0))试试。。。。
var arr = [1,23,4,54,/*....*/]; 意思是,分配一段内存,里面存储1,23, 4, 54 ... 然后,arr只是存储了这段内存的标识。
arr[1] = 1; 意思是把arr标识那个内存的第2个位置,修改为1,也就是说标识arr并没有改变,只是依旧是指向这段内存。
data.push(arr) 都是保存的这个标识,所以都是指向同一段内存。
添加回答
举报
0/150
提交
取消
