我正在尝试从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);
}
}
答案 0 :(得分:1)
您的第一个循环选择要排序的元素。如果您只需要中位数,则只需要对values.length / 2元素进行排序。所以你应该编辑它:
for (i = 0; i < values.length - 1; i++)
{
...
}
到
for (i = 0; i < values.length/2; i++)
{
...
}
和fyi在&#34;数组的长度是奇数&#34;例如,惯例是平均中间两个值。