我正在实现插入排序方法。这是我的代码的要求。
我的问题是:在主方法中调用时,我对Comparator参数c使用了什么?
这是我到目前为止,我有一些未实现的方法(合并排序和isAnagaram)忽略那些
public class Sorting
{
public static <T extends Comparable<T>> void insertionSort(T[] a, Comparator<T> c)
{
for (int i = 0; i < a.length; i++)
{
T key = a[i];
int j;
for (j = i - 1; j >= 0; j--)
{
if (c.compare(a[j], key) <= 0)
break;
a[j + 1] = a[j];
}
a[j + 1] = key;
}
}
public static void mergeSort()
{
//TODO
}
public static boolean isAnagram(String first, String second)
{
//TODO
return false;
}
public static void main(String[] args)
{
Integer a[] = { 99, 8, 19, 88, 62, 2, 1, 9, 19 };
// not sure how to pass parameter comparator
insertionSort(a, null );
for (int i = 0; i < a.length; i++)
{
System.out.print(a[i] + " ");
}
}
}
我查看了堆栈溢出以及在Comparator接口上搜索了很多但我无法找到任何需要将通用比较器作为参数传递的方法。有人可以帮助我告诉我不理解或指导我正确的方向。
答案 0 :(得分:2)
Comparator
是interface
,无法实例化。你需要实现它。有两种方法可以实现:
compare
equals
您需要为Integer
元素实现它们。像这样:
public class IntegerComparator implements Comparator {
public int compare(Integer a, Integer b) {
return a.intValue() - b.intValue();
}
public int equals(Object obj) {
return this.equals(obj);
}
}
并在main
中,您可以这样称呼它:
insertionSort(a, new IntegerComparator );
说明:Comparator
是interface
,因此无法实例化。你需要实现它。您有一组Integer
元素需要排序,因此您可以实现Integer
Comparator
。 compare
方法返回int值的减法。如果&lt; b,那就是消极的。如果a == b,那么它是0.如果a> b,那就是积极的。