第二个for里面为什么j要大于i?第二个for里面为什么j要大于i?<script type="text/javascript"> var arr = [12, 2223, 125, 17, 8, 11, 10, 2, 3];for(var i = 0; i < arr.length; i++) { for(var j = arr.length-1; j > i; j--) { if(arr[i] > arr[j]) { var value = -1; value = arr[i]; arr[i] = arr[j]; arr[j] = value; } } } console.log(arr.join()); </script>
3 回答
已采纳
MadMarical
TA贡献79条经验 获得超122个赞
你好。实际上这种问题进行一下手动模拟,答案呼之而出。
双重循环,i初始化为0,j初始化为8所以,if中判断arr[0]=12是否大于arr[8]=3 既然大于,两者进行交换。此时arr[0] = 3,J-1 = 7;循环继续,直到j = i时循环停止。
此时当然应该停止,既然j和i相等两者比较无意义,而且重要的是我们已经将最小的一个数排在了第1位,既然第1位是最小的,接下来i = 1时我们还需要比较第一位arr[0]吗?答案是不需要,所以,j>i终止条件优化了在时间上的效率。
Despicableme01
TA贡献11条经验 获得超9个赞
减少循环次数,提高代码效率。
i之前的数组元素是已经被排序过的,肯定都是小于之后的数的,所以就不用再参加循环了
顺便,这个可以不声明第三个变量来交换两个元素的位置如下
arr[i]+=arr[j]; arr[j]=arr[i]-arr[j]; arr[i]-=arr[j];
这样只能比较数字
7君
TA贡献2条经验 获得超0个赞
个人觉得:这个for循环是 08,17,26,35,44依序对比的,开始的时候:i=0,j=8,然后依序变化,如果i=j(即44)就不需要对比了,而i>j时就是53了,和前面的35对比组重复了,所以j要大于i。
添加回答
举报
0/150
提交
取消