请教问题

来源:4-5 冒泡排序

从不学习

2021-03-12 15:16:40

问题描述:

不明白for嵌套循环的条件


相关代码:

for (var i = 0; i < arr.length; i++) {
            for (var j = arr.length-1; j >= i; j--) {
              ...
            }
        }

问题描述:

不明白

第一层嵌套 i=1(为什么不是零),第二层嵌套 j=arr.lenth-1(为什么-1),j>=i(为什么不是j>i)


写回答

1回答

好帮手慕夭夭

2021-03-12

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

1、因为外层的循环负责这是第几趟比较,而内层负责两两比较。

http://img.mukewang.com/climg/604b268d0991038506900163.jpg

所以外层的i不能是0,因为既然已经开始比较了,那么就是从第1趟开始,而不是从第0趟开始。第0趟就表示没有比较,那么没有任何意义。


http://img.mukewang.com/climg/604b26b2090fc69d09840703.jpg

2、而内层要两两比较,必须要通过索引值拿到数组中的元素。这里默认是从最后一个元素开始获取的,所以j的初始值就是数组的长度减1。

http://img.mukewang.com/climg/604b275e09b9925707290132.jpg

元素的索引(下标)是从0开始的,所以最后一个元素的索引为5,数组长度为6。例如第一次循环时,j=6-1=5,arr[j] 就是arr[5]拿到了元素1 ,而arr[j-1]为arr[4]就拿到了元素8。

http://img.mukewang.com/climg/604b27ae09df224304930068.jpg

3、因为比较的次数是n-1次,即i的最大值是数组的长度减去1,所以j会小于等于1,而不是只小于1哦。

http://img.mukewang.com/climg/604b293909dfc19412860370.jpg

建议同学多看几遍视频,多练习几遍代码,自己加深理解和印象。

祝学习愉快~

0

0 学习 · 15276 问题

查看课程

相似问题

请教问题

回答 2

请教问题

回答 1

请教问题

回答 1

请教问题

回答 7

请教问题

回答 2