内层循环负责两两比较,没听明白,一会前,一会后的,弄蒙了

内层循环负责两两比较,没听明白,一会前,一会后的,弄蒙了

# 具体遇到的问题
内层循环负责两两比较没听明白
# 报错信息的截图

# 相关课程内容截图

# 尝试过的解决思路和结果

# 粘贴全部相关代码,切记添加代码注释(请勿截图)

在这里输入代码

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]

  • dy12369 #1

    老师,在这里我有一点疑惑

    1,当j = 5 时,这个时候是不是取的这个数组下标为5的数字?

    2,j >= i,这个条件是不是可以理解为当i = 1时,j对应的值只需要取值到下标为1到此结束?

    2022-04-08 16:52:14
好帮手慕久久 2022-04-08 17:38:26

“dy12369”同学你好,问题解答如下:

1、对的。j=5,arr[j]就是arr[5],即获取arr中下标是5的元素(数字)。

2、对的。如果i=1,那么j只能是0、1,即j最大可以取到1。

祝学习愉快!

问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师