这俩天在疯狂的补JS知识,看到冒泡算法,也没看着网上的来就试着自己写了一个。实现是没什么问题,但是观察本质就有点难受,看到数组的交换动向让我迷惑,自己明明是想把最小的数往前排,看到数组的动向为啥是大的数先排到前面去了???当时确实是脑壳爆炸。
/**
* 这种算法的本质就是找到数组中最大的那个数,看看有没有比自己大的,如果有就把他换过来
* 可以理解为,我外层顺换出来的这个下标最适合谁占有,由于置换过数字,所以中间出来的数据会让人有点迷糊,心里就在想我的代码不是找谁最小吗?怎么最大的先跑前面去了。
*/
let arr = [222, 10, 20, 5, 3, 23, 54, 3];
function bubblingModeOne(arr) {
for (let i = 0; i < arr.length; i++) {
// console.log(arr)
for (let j = 0; j < arr.length; j++) {
// console.log(arr[i])
if (arr[i] < arr[j]) {
let sum = arr[i] + arr[j];
arr[i] = arr[j];
arr[j] = sum - arr[j];
}
// console.log(arr)
}
// console.log(arr)
// console.log("====")
}
return arr;
}
console.log(bubblingModeOne(arr));