js 冒泡排序理解

2020-07-01  本文已影响0人  Peter_2B

0: 先上结论:  下图就是冒泡算法


1:  外循环 length 为什么 - 1?  因为是两两比较,  整个数组6个元素, 当然就是比较5次; 

     也就是外循环,循环5次 两两比较,每一次的两两比较, 把当前位置的值 和 后一个位置 的值比较大小,  如果当前值大于后一个位置的值就 交换位置, 最后就找出最大的值,排到数组的最后;


2:  首先看到冒泡排序的算法,我产生了一个疑问?  为什么内循环的length  要 再减去 i 呢? 所以我尝试了不减 i;

上图可见: 内循环不减 i 同样也是可行的;得到的结果也是相同的;此时就可以结束了, 内循环不需要再-i,这样反而会造成混乱;


一开始看到内循环减 i 就晕了, 这也是冒泡排序最难的点:

内循环减 i 的作用:  不再比较 已经比较过的;    如同 for循环里 查找条件,如果为真, break 跳出循环 不再比较下去,节约内存的性能。

如何理解 内循环减 i:  先得理解  外循环 length 为什么 - 1?  因为是两两比较, 整个数组长度6个元素, 当然就是比较5次; 也就是外循环,循环5次 两两比较;

最后再来理解内循环:  arr.length-1-i:  

i 的作用:  就是忽略比较的长度

上一篇 下一篇

猜你喜欢

热点阅读