java - 使用选择排序查找数组的中位数

标签 java arrays median

我正在尝试从 Java 中的未排序数组中查找中位数。首先,我需要使用选择排序技术对数组进行排序,并且我无法使用任何 Java 库方法进行排序(因此没有 Arrays.sort(array))。另外,我也无法对整个数组进行排序。我只能对所需数量的元素进行排序以找到数组的中位数。我想对于偶数数组,它只是元素的一半加一(然后找到最后两个元素的平均值),而对于奇数数组,它只是元素的一半(最后一个是中位数)。

所以我不确定如何在正确的时间停止选择排序并从部分排序数组的最后一个或两个元素中找到中位数。以下是我到目前为止所拥有的。

import java.util.Arrays;

public class EfficientMedian
{
    public static void median(int[] values)
    {
        int i, j, temp;
        double median;

        //selection sort below
        for (i = 0; i < values.length - 1; i++)
        {
            for (j = i + 1; j < values.length; j++)
            {
                if (values[i] > values[j])
                {
                    temp = values[i];
                    values[i] = values[j];
                    values[j] = temp;
                }
            }
        }
        if (values.length % 2 == 0) //if the array is even
        {
            median = values[values.length/2]; //just a placeholder
        }
        else //if the array is odd
        {
            median = values[values.length/2];
        }
        System.out.println(Arrays.toString(values));
        System.out.println(median);
    }
    public static void main(String[] args)
    {
        int[] array1 = {567, 2, 600, 6, 601}, array2 = {45, 300, 46, 49};
        median(array1);
        median(array2);
    }
}

最佳答案

您的第一个循环选择要排序的元素。如果只需要中位数,则只需对values.length/2元素进行排序即可。所以你应该编辑这个:

for (i = 0; i < values.length - 1; i++)
    {
        ...
    }

for (i = 0; i < values.length/2; i++)
    {
        ...
    }

仅供引用,在“数组长度为奇数”的情况下,约定是对中间两个值进行平均。

关于java - 使用选择排序查找数组的中位数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25316687/

相关文章:

arrays - 如何在 Hibernate 中使用 Postgres 数组 "contains"条件?

python - 如何在 Pandas 数据框中用中值替换异常值?

java - 蓝牙条码扫描仪的解码输出

java - 如何在我的登录和注册页面更改密码?

javascript - 如何使用 jQuery.grep() 动态过滤数组?

algorithm - 要添加到数组中使其中位数等于x的最小元素数

ruby - 在 Ruby 中计算中位数

适用于 GAE 的 Java PDF 库?

java - 计算 Apache Spark DStream 中的元素

c - 数组大小为 2000 及以上