java 入門 for與if共用一問

2007-04-18 6:46 am
for(j = 0; j < l-1; j++) {
for(i = 0; i < l; i++) {
if(a[j] > a[i]) {
k = a[j];
a[j] = a[i];
a[i] = k;
}
}
}
實在想不通這一段,
有人可以解釋一下他的步驟嗎?
下面是可以用的資料,解釋時可用可不用。
int a[] = {210, 19,72,129, 34};
int l = a.length;
int i, j, k;
更新1:

第二行錯了,for(i = j+1; i

回答 (1)

2007-04-18 8:15 am
✔ 最佳答案
這段的目的是將 a[] 內的數由細至大順排。
if 的那段是逐一比較 a[] 內兩個數,借 k 來將 a[i] 與 a[j] 互換。
先固定比較目標 a[j],以每一次 i 循環將 a[] 內最大值的數逐一移到最後。
然後比較下一個目標 a[j],再做 i 循環。
當做完所有循環後,a[] 內便由細至大排順了。

其實呢段 java 可以間短些及做得快些(如下):
for( j=a.length-1; j=1; j--) {
for( i=0; i < j; i++) {
if( a[i] > a[i+1] ) {
k = a[i];
a[i] = a[i+1];
a[i+1] = k;
}
}
}

每次 i 循環都將最大的移到最尾,所以下次 i 循環可以做少一次,越做次數越少,直至做完。

2007-04-18 09:18:32 補充:
更正:for( j=a.length-1; j > 0; j--) {for( i=0; i < j; i++) {if( a[i] > a[i+1] ) {k = a[i];a[i] = a[i+1];a[i+1] = k;}}}


收錄日期: 2021-04-23 17:06:52
原文連結 [永久失效]:
https://hk.answers.yahoo.com/question/index?qid=20070417000051KK05098

檢視 Wayback Machine 備份