如何使用compareTo按字母顺序排序?

时间:2016-09-24 03:39:51

标签: java sorting compareto alphabet

现在我正在进行一项任务,我们给出了一个按字母顺序排序的单词列表,我们必须使用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 个答案:

答案 0 :(得分: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]