2016-05-12 8 views
0
public class MyBubbleSort { 

public static void bubbleSort(int[] a, int n) { 

    int i, j, temp; 

    for (i = 0; i <= (n-2); i++) { 
     for (j = i + 1; j <= (n-1); j++) { 
      if (a[j] < a[i]) { 
       temp = a[i]; 
       a[i] = a[j]; 
       a[j] = temp; 
      } 
     } 
    } 
} 
} 

私はデバッグをするときにソートされた配列を返しますが、100%確実にしたいと思っています。私のバブルソートの実装は正しいですか?

+1

が重複する可能性を考える場合、このコードに代わり、あるあなたの< =のの正しい実装をされていますバブルソート?](http://stackoverflow.com/questions/5619722/is-this-code-a-correct-implementation-of-bubble-sort) –

+0

'n'パラメータが奇数です。それは与えられましたか? – zapl

+0

それは不要だと思いますか? – jtetra13

答えて

0

あなたは、コードを少し整理できます

  1. それは、単一の方法sort(int[] a, int n)とのインタフェースの分類を拡張してください。
  2. MyBubbleSortメソッドは、このインターフェイスを実装し、静的でないようにする必要があります。

  3. int iおよびjは、対応するfor宣言の中で宣言する必要があります。

  4. tempは、ifの内側に宣言する必要があります。
  5. これはJava配列型のプロパティであるため、配列の長さを渡す必要があるかどうかは疑問です。長さを渡す唯一の時間は、サブ配列をソートする場合です。
+0

デバッグモードでMainメソッドを実行したとき、ソートされた配列が返されましたが、バブルソートでソートされていて、偶然別の方法でソートされていないことを確認したかっただけです。 – jtetra13

0

正しいバブルソートを行っています!あなたの "if"ステートメントでは、正しく並べ替えられていない場合は、隣接する2つの値を正しくスワップしています。これがバブルソートの原則です。配列が正しくソートされるまでこのプロセスを繰り返します。 https://www.youtube.com/watch?v=lyZQPjUT5B4

あなたのコードには変なことがあります。コメントの中でzaplが言ったように、この "n"パラメータは必要ありません。メソッド内で配列のサイズを取得するだけです。

また「<長さ」、「<長さ - 1」を使用して好むあなたは[のも、より直感的な

public static void bubbleSort(int[] tab) { 
     int n = tab.length ; 
     for (int i = 0; i < n-1; i++) { 
      for (int j = i + 1; j < n ; j++) { 
       if (tab[j] < tab[i]) { 
        int temp = tab[i]; 
        tab[i] = tab[j]; 
        tab[j] = temp; 
       } 
      } 
     } 
    } 
関連する問題