2
public class Test{
   public static void main(String[] args){
      int[] a = {3, 2, 5, 21}; // created an array with 4 elements
      int b,c;

      for (b=0; b<=2; b++)//for loop that will have 3 iterations  
      {
        if (a[b] < a[b+1])
        {
           c=a[b];//this
           a[b] = a[b+1];//is 
           a[b+1] = c;//swapping
        }
      }

      for(b=0; b<4; b++)
      {
        System.out.println(a[b]);
      }
   }
}

これは出力します:

3
5
21
2

私がそれを書き留めていたときに私が得たもの:

3
5
21
21

誰かが私の考えでそれにアプローチする方法を教えてもらえますか?

4

4 に答える 4

3

本当にプログラムをトレースしたいだけなら、最初のループの各反復をfor手動で実行できます (2 番目のループは の内容を出力するだけですa)。

ループ開始前、aホールド

{3, 2, 5, 21}

最初の反復 ( b = 0):未満で
a[0] はないa[1]ため、何もしません。


2 番目の反復 ( b = 1):
a[1] より小さいのでa[2]、それらを交換します。今a保持

{ 3、5、2、21 } _ _

3 回目の繰り返し ( b = 2):
a[2] より小さいのでa[3]、それらを交換します。今a保持

{3, 5, 21 , 2 }

これが後で印刷されます。

于 2012-11-07T00:21:50.310 に答える
1

3 回目のイテレーションで迷子になったので、そこから始めます。

配列は{3, 5, 2, 21}. b = 2

if (a[b] < a[b+1])は と同等です。if (2 < 21)これはtrueです。

c=a[b];//this->c = 2

a[b] = a[b+1];//is->a[2] = 21

a[b+1] = c;//swapping->a[2+1] = 2

したがってa[2] = 21a[3] = 2最終的な配列は次のとおりです。

{3, 5, 21, 2}

于 2012-11-07T00:20:15.090 に答える
1

コードは常に の初期要素を出力しますがa、場合によっては並べ替えられます。2したがって、負けて2 回表示されたので、あなたの期待はおそらく正しいとは言えません21

于 2012-11-07T00:18:12.170 に答える
0

完全な外側のループを実行するたびに、配列の最後に次に小さい要素が配置されます。したがって、ループを実行しているのは、配列の最後に 2 (最初の最小要素) になったときだけです。

他の人が述べたように、これを完全な並べ替えにしたい場合は、並べ替えを完了するためにメインループをさらに反復する必要があります (n-1、n は配列の長さであるため、この場合は実行する必要がありますループを 3 回)。

于 2012-11-07T00:24:07.707 に答える