2016-11-19 6 views
0

Я пытаюсь изучить Insertion Sort на Java, но у меня есть проблема. Я изучил сортировку в порядке возрастания. Теперь мне нужно сделать это в порядке убывания, но я должен начать сортировку массива справа налево.Вставка Сортировка справа налево

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

Я хочу задать еще одну вещь. Что делает «утверждать»? – Thec0der

+0

assert предназначен только для целей тестирования, потребляет некоторый логический термин, и если он ложный, программа вылетает из строя. Он используется только, когда в потоке программы должно выполняться какое-то условие, чтобы проверить, что состояние вашей программы в правильном состоянии. – fairtrax

0

Используйте тот же алгоритм, только в чеке, который меньше, обмениваются аргументы для метода less такой, что: less(a[j - 1], a[j]). Затем меньшие элементы будут сдвинуты вправо.

+0

Он работает для запуска своего рода слева направо. Когда я пытаюсь распечатать, это правда. Но, как я уже сказал, мне нужно начать сортировку справа налево. – Thec0der

+0

Зачем вам нужно начинать справа налево? Если вы хотите сортировать descend (от самого большого до самого маленького), вы также можете сортировать слева направо, просто беря сначала самые большие элементы. – fairtrax

+0

в любом случае, если это действительно так, то – fairtrax