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