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

第二个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>


慕粉1463572084
浏览 1508回答 3
3回答

MadMarical

你好。实际上这种问题进行一下手动模拟,答案呼之而出。双重循环,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

减少循环次数,提高代码效率。i之前的数组元素是已经被排序过的,肯定都是小于之后的数的,所以就不用再参加循环了顺便,这个可以不声明第三个变量来交换两个元素的位置如下arr[i]+=arr[j]; arr[j]=arr[i]-arr[j]; arr[i]-=arr[j];这样只能比较数字

7君

个人觉得:这个for循环是 08,17,26,35,44依序对比的,开始的时候:i=0,j=8,然后依序变化,如果i=j(即44)就不需要对比了,而i>j时就是53了,和前面的35对比组重复了,所以j要大于i。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript