2016-09-24 2 views
0

Прямо сейчас я работаю над заданием, и мы даем список слов для сортировки в алфавитном порядке, и мы должны использовать метод compareTo. Мне нужно, чтобы отсортировать весь список, чтобы он мог быть напечатан. Я уже несколько часов борюсь с этой заключительной частью около часа, может кто-нибудь дать понять, почему этот код не работает вообще?Как сортировать по алфавиту с помощью compareTo?

public static void selectionSort(final Comparable[] array) 
{ 
    if (array == null) 
    { 
     throw new NullPointerException("The array is null."); 
    } 
    for(int i = 0; i < (array.length - 1); i++) 
    { 
     Comparable thisWord = array[i]; 
     int num = i; 
     while(thisWord.compareTo(array[num]) > 0) 
     { 
      Comparable tmp = array[num]; 
      array[num] = thisWord; 
      array[i] = tmp; 
      num++; 
     } 
    } 
} 

Я мог бы быть в отъезде, так или иначе я не чувствую, что я продвигаюсь. Любая помощь приветствуется!!

+1

проверить эту http://stackoverflow.com/questions/27410241/sorting-a-list-alphabetically-using-compareto-method?rq=1 – Saravana

ответ

0

Вы хотите родовое Comparable типа как T extends Comparable<? super T>, но я хотел бы начать с родовым swap

private static <T> void swap(T[] array, int i, int j) { 
    if (i != j) { 
     T tmp = array[i]; 
     array[i] = array[j]; 
     array[j] = tmp; 
    } 
} 

Затем вы можете использовать, чтобы выполнить выбор рода как

public static <T extends Comparable<? super T>> void selectionSort(T[] array) { 
    if (array == null) { 
     throw new NullPointerException("The array is null."); 
    } 
    for (int i = 0; i < array.length - 1; i++) { 
     int num = i; // <-- num will be the min 
     for (int j = i + 1; j < array.length; j++) { 
      if (array[j].compareTo(array[num]) < 0) { 
       num = j; // <-- j is less than num, set num to j 
      } 
     } 
     swap(array, num, i); // <-- swap the elements at num and i 
    } 
} 

И тогда вы можете используйте его как

public static void main(String argv[]) { 
    String[] arr = { "z", "b", "a" }; 
    selectionSort(arr); 
    System.out.println(Arrays.toString(arr)); 
} 

Какие выходы

[a, b, z] 
Смежные вопросы