小白想尝试一下使用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>
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)
都是保存的这个标识,所以都是指向同一段内存。