3

私はそれを理解しようとしたいのですが、正しい方向に向けられる必要があるだけです。解決策を書くだけでなく、それを機能させるために何をする必要があるかを理解したいと思います。

    static void bubbleSort() {
        int [] a = {1,3,4,2,5};
        int [] b = new int[a.length];
        int j = 0;

        for(int c = 0;c <= a.length;c++){//this loop doesnt even do anything??? 
            for(int i = 0;i<a.length-j;i++){

                if(a[i]>a[i+1]){
                    b[i] = a[i+1];
                    b[i+1] = a[i];
                    j++;
                }
                else{
                    b[i] = a[i];
                    b[i+1] = a[i+1];
                    j++;
                }
            }
        }

        for(int i = 0; i< b.length ; i++)
            System.out.println(b[i]);
    }
4

2 に答える 2

1

あなたのコードには多くの問題があります -

1) 追加の配列 'b' は必要ありません。バブル ソートはインプレースで実行できます。

2) 'j' の使用を考え、'c' に置き換えて、これがループにどのように違いをもたらすかを確認してください。

3) 新しい並べ替えられた配列が 'b' に表示されますが、すべてのステップで条件をチェックしています -

if(a[i]>a[i+1])

ここで「b」が果たすべき役割があると思いませんか?

上記の点を考慮し、まだ問題がある場合はこの投稿にコメントしてください。

于 2012-06-25T09:52:12.593 に答える
-1

確実ではありませんが、これは修正された実装であるべきだと思います

static void bubbleSort() {
    int [] a = {1,3,4,2,5};
    for(int c = 0;c < a.length;c++){//now it does 
        for(int i = 0;i+1<a.length-c;i++){

            if(a[i]>a[i+1]){
                int tmp = a[i];
                a[i] = a[i+1];
                a[i+1] = tmp;
            }
        }
    }

    for(int i = 0; i< a.length ; i++)
        System.out.println(a[i]);
}

a を何度も繰り返しますが、比較しなかった b を変更しました。したがって、最初の for ループは何もしていませんでした。j は必要ありません。c は機能します。内側のループで 1 サイクルを作成した場合、最大数が最後にあるため、再度確認する必要はありません。cループはcまで実行する必要があります

于 2012-06-24T22:42:04.130 に答える