int n = ...; // get N from the user;
List<Double> list = new ArrayList<Double>();
for (int i=0; i<n; i++) {
double element = ...; // get element from the user;
list.add(element);
}
// Have the Java library sort the list for you
Collections.sort(list);
// now pick/compute the median from the sorted list
// I'll leave that up to you..
try (Scanner scanner = new Scanner(System.in)) {
System.out.print("Number of numbers: ");
int N = scanner.nextInt();
System.out.printf("Enter the %d numbers: ", N);
double median = IntStream.range(0, N)
.mapToDouble(i -> scanner.nextDouble())
.sorted()
.skip((N-1)/2)
.limit(2-N%2)
.average()
.getAsDouble();
System.out.printf("The median is %f%n", median);
}
# 1 楼答案
您肯定需要至少N/2个位置的存储空间。这是没有办法的
在OP发布后编辑:
学习编程方面的好课程,尤其是数据结构。您不能依赖Stackoverflow完成所有的开发人员职业生涯;-)。话虽如此,让我们给你一个起点:我在这里使用ArrayList:
# 2 楼答案
我建议你手工编写一个二叉树。您可能需要允许重复,因为Java的内置
TreeSet
不允许重复。也可能是您可以在网络的某个地方找到合适的树实现。这棵树应该分类。更多灵感请参见Binary search tree on Wikipedia你的主程序将一个接一个地读取你的数字,并将它们插入到你的树中。之后,它将在树中查询中间元素,如果
N
是偶数,则查询两个中间元素实现树不需要任何数组。为了查找第i个元素,树将执行按顺序遍历,计算遇到的元素并返回第i个元素
# 3 楼答案
没有
Array
,没有List
,或任何其他Collection
(不要理窗帘后面的那个人。)