2016-09-24 176 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]