0

このバブルソート アルゴリズムを実行しましたが、リストが完全にソートされません。たとえば、数字が 10,9,8,7,6 の場合、9,8,7,6,10 として並べ替えられ、そこで停止します。なぜこの条件をif (i + 1 < args.length)これに入れたか疑問に思っているのは、この比較を行うときにインデックスが 5 に増加するために IndexOutOfBoundsException が発生するためです。if (currentNumber > args[i + 1])

リスト全体をソートしようとしたためにアルゴリズムが複雑になりすぎたため、以前に行った余分なコードを削除しましたミューテーターメソッドとしてやったときに欲しい。また、アルゴリズムはちょうどバブルソートのように要素を比較して交換したにもかかわらず、私が行った修正はバブルソートではないと考える人もいました。したがって、これが、以前に作業した余分なコードを削除することにした理由です。

私の質問は、リスト全体をソートするにはどうすればよいですか? これまでのアルゴリズムはそれを行わないためです。

package algorithm;

import java.util.Arrays;

public class Algorithm {

/**
 * @param args the command line arguments
 */
private static int list[] = {10, 9, 8, 7, 6};

public Algorithm() {
}

public static void main(String[] args) {

    Algorithm alg = new Algorithm();

    alg.bubblesort(list);

}

public int[] bubblesort(int[] args) {
    for (int i = 0; i < args.length; i++) {

        int currentNumber = args[i];
        if (i + 1 < args.length) {
            if (currentNumber > args[i + 1]) {
                args[i] = args[i + 1];
                args[i + 1] = currentNumber;
            }
        }

    }
    System.out.println(Arrays.toString(args));
    return args;
}
}
4

1 に答える 1

1

バブル ソートは、2 つの入れ子になったループを使用して行われます。最大数を配列の最後のインデックスに移動する内側のループしかありません。次のように外側のループを追加する必要があります。

for (int j = 0; j < args.length; j++) {
   for (int i = 0; i < args.length - j; i++) {
       int currentNumber = args[i];
       if (i + 1 < args.length) {
         if (currentNumber > args[i + 1]) {
            args[i] = args[i + 1];
            args[i + 1] = currentNumber;
         }
       }
   }
}
于 2013-09-05T22:27:04.083 に答える