中位数方法返回较高值的中位数



因此,我正在编写一个方法,在该方法中,它可以找到n编号数组的中值。如果数组有奇数个元素,它可以正常工作,但是如果数组有偶数个元素,我希望程序输出2个中间数中的较高值,而不是2个中间值中的较低值。目前,我的代码正在输出较低的数字。这是代码:

public Long getMedian() {
    long median = 0;
    Arrays.sort(elements);
    if (length % 2 != 0) {
        median = elements[length/2];
    } if (length % 2 == 0) {
        median = ((elements[length/2]) + (elements[(length/2) - 1])) / 2;
        median++;
    }
    return median;
}

例如,如果输入了编号为[30 41 45 50]的数组,则中值将是45,而不是41。请帮忙!

令人惊讶的是,它是最简单的解决方案:

public Long getMedian() {
    Arrays.sort(elements);
    return elements[elements.length / 2];
}

在您的代码中,我怀疑变量length不是elements.length

无论如何,我使用这个中值函数:

public static double median(int[] values) {
    Arrays.sort(values);
    if (values.length == 0)
        return 0;
    else if (values.length % 2 == 0)
        return ((double)values[values.length/2] + (double)values[values.length/2 - 1])/2;
    else
        return (double)values[values.length/2];
}
public double findmedian(int[] arr) {
    int middlevalue = arr.length/2;
    if (arr.length%2 == 1) {
        return arr[middle];
    } else {
        return (arr[middle-1] + arr[middle]) / 2.0;
    }
}

我认为找到米迪亚时最好返回一个双倍的值。也许这种方法会对你有所帮助。

您可以实现中值的右边界,如下所示:

median = elements[(length/2)]

对于偶数情况

最新更新