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