内层循环负责两两比较,没听明白,一会前,一会后的,弄蒙了
来源:4-5 冒泡排序
能量咕噜略略
2020-10-15 15:45:06
# 具体遇到的问题
内层循环负责两两比较没听明白
# 报错信息的截图
# 相关课程内容截图
# 尝试过的解决思路和结果
# 粘贴全部相关代码,切记添加代码注释(请勿截图)
在这里输入代码
for (var j=arr.length-1; j>=i ; j--); 这里不太明白,老师能否在具体用文字细说下,一会前,一会后的,搞蒙了。这里的j到底是哪个数?,可通过选择【代码语言】突出显示
2回答
同学你好,外层循环控制的是趟数,也就是比较多少趟。内层循环控制的次数,也就是数组中的数字两两比较,一共需要比较多少次。
以数组[6, 2, 9, 3, 8, 1]为例:
第一趟比较过程
内层循环负责两两比较,j的初始值为数组的长度-1,也就是5,内层每循环一次,j的值就会-1
第一次执行内层循环:j=5;i=1 arr[j]与arr[j-1]比较,也就是1和8比较,1比8小,1和8交换位置,交换位置之后,数组为[6, 2, 9, 3, 1, 8]
第二次执行内层循环:j=4;i=1 arr[j]与arr[j-1]比较,也就是1和3比较,1比3小,1和3交换位置,交换位置之后,数组为[6, 2, 9, 1, 3, 8]
第三次执行内层循环:j=3;i=1 arr[j]与arr[j-1]比较,也就是1和9比较,1比9小,1和9交换位置,交换位置之后,数组为[6, 2, 1, 9, 3, 8]
第四次执行内层循环:j=2;i=1 arr[j]与arr[j-1]比较,也就是1和2比较,1比2小,1和2交换位置,交换位置之后,数组为[6, 1, 2, 9, 3, 8]
第五次执行内层循环:j=1;i=1 arr[j]与arr[j-1]比较,也就是1和6比较,1比6小,1和6交换位置,交换位置之后,数组为[1, 6, 2, 9, 3, 8]
第六次执行内层循环:j=0;i=1 j >= i这个条件不成立了,内层循环结束,执行外层循环。
第二趟比较过程
经过外层循环,i=2,再次开始内层循环
第一次执行内层循环:j=5;i=2 arr[j]与arr[j-1]比较,也就是8和3比较,8比3大,8和3不交换位置,数组为[1, 6, 2, 9, 3, 8]
第二次执行内层循环:j=4;i=2 arr[j]与arr[j-1]比较,也就是3和9比较,3比9小,3和9交换位置,交换位置之后数组为[1, 6, 2, 3, 9, 8]
第三次执行内层循环:j=3;i=2 arr[j]与arr[j-1]比较,也就是3和2比较,3比2大,3和2不交换位置,数组为[1, 6, 2, 3, 9, 8]
第四次执行内层循环:j=2;i=2 arr[j]与arr[j-1]比较,也就是2和6比较,2比6小,2和6交换位置,数组为[1, 2, 6, 3, 9, 8]
第五次执行内层循环:j=1;i=2 j >= i这个条件不成立了,内层循环结束,执行外层循环。
第三趟比较过程
经过外层循环,i=3,再次开始内层循环
第一次执行内层循环:j=5;i=3 arr[j]与arr[j-1]比较,也就是8和9比较,8比9小,8和9交换位置,数组为[1, 2, 6, 3, 8, 9]
第二次执行内层循环:j=4;i=3 arr[j]与arr[j-1]比较,也就是8和3比较,8比3大,8和3不交换位置,数组为[1, 2, 6, 3, 8, 9]
第三次执行内层循环:j=3;i=3 arr[j]与arr[j-1]比较,也就是3和6比较,3比6小,3和6交换位置,数组为[1, 2, 3, 6, 8, 9]
第四次执行内层循环:j=2;i=3 j >= i这个条件不成立了,内层循环结束,执行外层循环。
第四趟比较过程
经过外层循环,i=4,再次开始内层循环
第一次执行内层循环:j=5;i=4,arr[j]与arr[j-1]比较,也就是9和8比较,9比8大,9和8不交换位置,数组为[1, 2, 3, 6, 8, 9]
第二次执行内层循环:j=4;i=4,arr[j]与arr[j-1]比较,也就是8和6比较,8比6大,8和6不交换位置,数组为[1, 2, 3, 6, 8, 9]
第三次执行内层循环:j=3;i=4 j >= i这个条件不成立了,内层循环结束,执行外层循环。
第五趟比较过程
经过外层循环,i=5,再次开始内层循环,
第一次执行内层循环:j=5;i=5,arr[j]与arr[j-1]比较,也就是9和8比较,9比8大,9和8不交换位置,数组为[1, 2, 3, 6, 8, 9]
第二次执行内层循环:j=4;i=5,j >= i这个条件不成立了,内层循环结束,执行外层循环。
经过外层循环,i=6,i < arr.length; 条件不成立,终止循环,
最终结果为[1, 2, 3, 6, 8, 9]
好帮手慕久久
2022-04-08
“dy12369”同学你好,问题解答如下:
1、对的。j=5,arr[j]就是arr[5],即获取arr中下标是5的元素(数字)。
2、对的。如果i=1,那么j只能是0、1,即j最大可以取到1。
祝学习愉快!
相似问题
回答 2
回答 2