请教问题
来源: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回答
同学你好,问题解答如下:
1、因为外层的循环负责这是第几趟比较,而内层负责两两比较。
所以外层的i不能是0,因为既然已经开始比较了,那么就是从第1趟开始,而不是从第0趟开始。第0趟就表示没有比较,那么没有任何意义。
2、而内层要两两比较,必须要通过索引值拿到数组中的元素。这里默认是从最后一个元素开始获取的,所以j的初始值就是数组的长度减1。
元素的索引(下标)是从0开始的,所以最后一个元素的索引为5,数组长度为6。例如第一次循环时,j=6-1=5,arr[j] 就是arr[5]拿到了元素1 ,而arr[j-1]为arr[4]就拿到了元素8。
3、因为比较的次数是n-1次,即i的最大值是数组的长度减去1,所以j会小于等于1,而不是只小于1哦。
建议同学多看几遍视频,多练习几遍代码,自己加深理解和印象。
祝学习愉快~