public class MergeSort {
private void sort(Comparable[] a, Comparable[] aux, int lo, int hi) {
if (lo > hi) return;
int mid = lo + (hi - lo)/2;
sort(a, aux, mid + 1, hi);
sort(a, aux, lo, mid - 1);
merge(a, aux, lo, mid, hi);
}
public void sort(Comparable[] a) {
Comparable[] aux = new Comparable[a.length];
sort(a, aux, 0, a.length);
}
public void merge(Comparable[] a, Comparable[] aux,
int lo, int mid, int hi) {
for (int i = 0; i <= hi; i ++) {
aux[i] = a[i];
}
int i = lo, j = mid + 1;
for (int k = 0; k < hi; k ++) {
if (i > mid) aux[k] = a[j++];
else if (j > hi) aux[k] = a[i++];
else if (less(a[i], a[j])) aux[k] = a[i++];
else aux[k] = a[j++];
}
}
private boolean less(Comparable a, Comparable b) {
if (a.compareTo(b) == -1) return true;
return false;
}
}
我有以上代码用于mergesort算法。现在,我想用它对双精度数组进行排序。但是,它说了一个错误:sort(java.lang.Comparable [])无法应用于(double [])。我的问题是为什么会发生这种情况以及如何避免呢?以我的理解,如果double实现Comparable(确实如此),则代码必须可以正常工作。
D ouble实现可比,您似乎传递了原始类型d ouble的数组。如果不是数组,由于自动boxing,您不会注意到。