Mergesort在Java中对double进行排序。可比的问题

问题描述 投票:0回答:1
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(确实如此),则代码必须可以正常工作。

java double mergesort
1个回答
0
投票

D ouble实现可比,您似乎传递了原始类型d ouble的数组。如果不是数组,由于自动boxing,您不会注意到。

© www.soinside.com 2019 - 2024. All rights reserved.