现在我正在进行一项任务,我们给出了一个按字母顺序排序的单词列表,我们必须使用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++;
}
}
}
我可能会离开,无论哪种方式我都不觉得我在取得任何进展。任何帮助将不胜感激!!
答案 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]