为了账号安全,请及时绑定邮箱和手机立即绑定

关于数组排序的问题麻烦帮帮。

关于数组排序的问题麻烦帮帮。

慕粉1463572084 2016-07-19 21:34:53
第二个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终止条件优化了在时间上的效率。

查看完整回答
1 反对 回复 2016-07-19
?
Despicableme01

TA贡献11条经验 获得超9个赞

减少循环次数,提高代码效率。

i之前的数组元素是已经被排序过的,肯定都是小于之后的数的,所以就不用再参加循环了

顺便,这个可以不声明第三个变量来交换两个元素的位置如下

arr[i]+=arr[j];
arr[j]=arr[i]-arr[j];
arr[i]-=arr[j];

这样只能比较数字

查看完整回答
1 反对 回复 2016-07-19
?
7君

TA贡献2条经验 获得超0个赞

个人觉得:这个for循环是 08,17,26,35,44依序对比的,开始的时候:i=0,j=8,然后依序变化,如果i=j(即44)就不需要对比了,而i>j时就是53了,和前面的35对比组重复了,所以j要大于i。

查看完整回答
反对 回复 2016-07-20
  • 3 回答
  • 0 关注
  • 1498 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信