慕粉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條經(jīng)驗 獲得超122個贊
你好。實際上這種問題進行一下手動模擬,答案呼之而出。
雙重循環(huán),i初始化為0,j初始化為8所以,if中判斷arr[0]=12是否大于arr[8]=3 既然大于,兩者進行交換。此時arr[0] = 3,J-1 = 7;循環(huán)繼續(xù),直到j = i時循環(huán)停止。
此時當然應該停止,既然j和i相等兩者比較無意義,而且重要的是我們已經(jīng)將最小的一個數(shù)排在了第1位,既然第1位是最小的,接下來i = 1時我們還需要比較第一位arr[0]嗎?答案是不需要,所以,j>i終止條件優(yōu)化了在時間上的效率。

Despicableme01
TA貢獻11條經(jīng)驗 獲得超9個贊
減少循環(huán)次數(shù),提高代碼效率。
i之前的數(shù)組元素是已經(jīng)被排序過的,肯定都是小于之后的數(shù)的,所以就不用再參加循環(huán)了
順便,這個可以不聲明第三個變量來交換兩個元素的位置如下
arr[i]+=arr[j]; arr[j]=arr[i]-arr[j]; arr[i]-=arr[j];
這樣只能比較數(shù)字

7君
TA貢獻2條經(jīng)驗 獲得超0個贊
個人覺得:這個for循環(huán)是 08,17,26,35,44依序對比的,開始的時候:i=0,j=8,然后依序變化,如果i=j(即44)就不需要對比了,而i>j時就是53了,和前面的35對比組重復了,所以j要大于i。
添加回答
舉報
0/150
提交
取消