1

そのため、このアルゴリズムを機能させるように試みましたが、実行するたびに[10,11,7,10,7,5,7,5]が出力として表示されます。目標は、降順で結果を取得することでした。さらに、配列に6つの値しか含まれていないのに、なぜ8つの結果があるのか​​わかりません。助けてください..ありがとう。パブリッククラス検索{

public static void main (String[]args)
{
    int[] array = {10,7,11,5,13,8};
    //ExchangeSort(array);

};

public static void ExchangeSort(int[] num)
{
    int i,j,temp;

    for(i=1;i<num.length-1;i++)
    {
        for(j=i+1;j<num.length;j++)
        {
            if(num[i]<num[j])
            {
                temp = num[i];
                num[i] = num[j];
                num[j] = temp;

                //System.out.println(temp);
            }
        }

    }
};

};

4

2 に答える 2

2

配列インデックスが から始まるため、並べ替えの最初の要素を無視してい0ます。最初のループは index0で始まり、次のようになりlength-1ます。

     for(i=0;i<num.length-1;i++)

Arrays.toString また、次のように(ループは不要)を使用して、ループの外側またはメイン メソッドで並べ替えられた配列を出力する必要があります。

     // this will print the array elements
     System.out.println("Sorted Array: "+Arrays.toString(num));

;メソッドの末尾からセミコロンを削除します。

Observatory Note: メソッド名は大文字で始めるべきではありません。

編集:完全に修正されたコードは次のとおりです。

public static void main(String[] args) {
    int[] array = {10,7,11,5,13,8};
    exchangeSort(array);
    System.out.println("Sorted Array: "+Arrays.toString(array));
}
public static void exchangeSort(int[] num) {
    int temp;
    for(int i=0;i<num.length-1;i++){
        for(int j=i+1;j<num.length;j++){
            if(num[i]<num[j]){
                temp = num[i];
                num[i] = num[j];
                num[j] = temp;
            }
        }
    }
    System.out.println("Sorted Array: "+Arrays.toString(num));
}
于 2012-12-26T15:42:53.293 に答える
1

あなたの出力はどこから来ますか?

前にコメントを削除しExchangeSort(array);、簡単な出力を追加しました。

    ExchangeSort(array);

    for (int i : array) {
        System.out.println(i);
    }

次に、コードを実行すると、次のようになります。10 13 11 8 7 5これは、期待される結果に近いものです。10ループ インデックスは 1 で始まりますが、配列インデックスは 0 で始まるため、間違った位置にあります。したがって、最初の要素は変更されません。

の開始値をiから1に変更することで、これを修正でき0ます。

for(i=0; i<num.length-1; i++)
于 2012-12-26T15:43:00.353 に答える