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

时间:2014-08-14 20:04:26

标签: java arrays median

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

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

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

1 个答案:

答案 0 :(得分:1)

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

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

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

和fyi在&#34;数组的长度是奇数&#34;例如,惯例是平均中间两个值。