Как отсортировать по алфавиту используя 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 ответ

Вы хотите универсальный 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]
Другие вопросы по тегам