0: 先上结论: 下图就是冒泡算法
![](https://img.haomeiwen.com/i20409039/74b700f6c423da43.png)
![](https://img.haomeiwen.com/i20409039/6c1e58828ad06dee.png)
1: 外循环 length 为什么 - 1? 因为是两两比较, 整个数组6个元素, 当然就是比较5次;
也就是外循环,循环5次 两两比较,每一次的两两比较, 把当前位置的值 和 后一个位置 的值比较大小, 如果当前值大于后一个位置的值就 交换位置, 最后就找出最大的值,排到数组的最后;
![](https://img.haomeiwen.com/i20409039/a9407c07a1c5f06e.png)
2: 首先看到冒泡排序的算法,我产生了一个疑问? 为什么内循环的length 要 再减去 i 呢? 所以我尝试了不减 i;
上图可见: 内循环不减 i 同样也是可行的;得到的结果也是相同的;此时就可以结束了, 内循环不需要再-i,这样反而会造成混乱;
一开始看到内循环减 i 就晕了, 这也是冒泡排序最难的点:
内循环减 i 的作用: 不再比较 已经比较过的; 如同 for循环里 查找条件,如果为真, break 跳出循环 不再比较下去,节约内存的性能。
如何理解 内循环减 i: 先得理解 外循环 length 为什么 - 1? 因为是两两比较, 整个数组长度6个元素, 当然就是比较5次; 也就是外循环,循环5次 两两比较;
最后再来理解内循环: arr.length-1-i:
i 的作用: 就是忽略比较的长度
![](https://img.haomeiwen.com/i20409039/9a9f0ffb028335d6.png)
网友评论