2016-11-19 6 views
0

JavaでInsertion Sortを学習しようとしていますが、問題があります。私は昇順で挿入の並べ替えを学びました。今、私は降順でそれを行う必要がありますが、私は右から左に配列をソートする必要があります。挿入右から左へ並べ替え

public class Sorting { 

public static void sort(Comparable[] a) { 
    int N = a.length; 
    for (int i = 1; i < N; i++) {        
     for (int j = i; j > 0 && less(a[j], a[j - 1]); j--) 
      swap(a, j, j - 1); 
    } 
} 

private static void swap(Comparable[] a, int i, int j) { 
    Comparable t = a[i]; 
    a[i] = a[j]; 
    a[j] = t; 
} 

private static boolean less(Comparable v, Comparable w) {             
    return v.compareTo(w) < 0; 
} 

}

上記で昇順に左から右に配列をソートコード(1,2,3,4、...)。

降順に変更する必要がありますが、右から左(5,4,3,2 ..)に並べ替える必要があります。 私は、コードを変更し、これを試してみました:

public static void sort(Comparable[] a) { 
    int N = a.length; 
    for (int i = N-1; i>=0; i--) { 
     for (int j = i; j >= 1 && less(a[j-1], a[j]); j++) 
      swap(a, j, j-1); 
    } 
} 

答えて

0

ここで、私もそれをテストし、試してみる:

public class InsertionSort { 
     public static void main(String[] args) { 
      Comparable[] a = new Comparable[]{5,6,12,1,3,15,4,0,9}; 
      sort(a); 
      for (int i = 1 ; i < a.length; i++) 
       assert a[i].compareTo(a[i-1]) >= 0; 
      System.out.println("sort is correct"); 
     } 

     public static void sort(Comparable[] a) { // Sort a[] into   increasing order. 
      int N = a.length; 
      for (int i = N - 1; i > 0; i--) { // Insert a[i] among   a[i-1], a[i-2],a[i-3]... ..        
       for (int j = i; j < N && less(a[j - 1], a[j]); j++) 
        exch(a, j, j - 1); 
      } 
     } 

     private static void exch(Comparable[] a, int i, int j) { 
      Comparable t = a[i]; 
      a[i] = a[j]; 
      a[j] = t; 
     } 

       private static boolean less(Comparable v, Comparable w)     {             
      return v.compareTo(w) < 0; 
     } 

    } 
+0

もう1つ質問したい。 「断言する」とは何ですか? – Thec0der

+0

assertはテスト目的のためのものであり、ブール値の項を消費し、falseの場合はプログラムがクラッシュします。これはプログラムフローで、プログラムの状態が正しいことを確認するために、ある条件が満たされている必要がある場合にのみ使用されます。 – fairtrax

0

がちょうど小さいチェックで、引数を交換し、同じアルゴリズムを使用してください..私は、ソート方法を数回変更したが、私はエラーを得ました方法lessの場合:less(a[j - 1], a[j])。次に、小さなエレメットは右にシフトされます。

+0

それは左から右にソート開始するために動作します。私が印刷しようとすると、それは本当です。しかし、私が言ったように、私は右から左へソートを開始する必要があります。 – Thec0der

+0

なぜあなたは右から左に向かって始める必要がありますか?降順をソートしたい場合(最も大きいものから小さいものへ)は、左から順に並べ替えることができます。とにかく – fairtrax

+0

とすれば、本当にそれをやりたければ、とにかく – fairtrax

関連する問題