亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

關于數組排序的問題麻煩幫幫。

關于數組排序的問題麻煩幫幫。

慕粉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 關注
  • 1561 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號