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

时间:2016-05-05 14:37:07

标签: java arrays

所以我正在编写一种方法,在其中找到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.请帮忙!

4 个答案:

答案 0 :(得分:2)

令人惊讶的是,这是最直接的解决方案:

/**
 * Example #1:
 * Requests a list of all account summaries for the authorized user.
 */
try {
  AccountSummaries accountSummaries = service.management().
      accountSummaries().list().execute();
} catch (IOException e) {
  System.out.println("An error occurred: " + e);
}

答案 1 :(得分:0)

在您的代码中,我怀疑变量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];
}

答案 2 :(得分:0)

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;
    }
}

我觉得最好在找到meadian时返回双倍价值。可能这种方法会对你有帮助。

答案 3 :(得分:0)

你可以像这样实现中位数的右边界:

median = elements[(length/2)]

表示偶数情况