如何在Java中找到存储为LinkedList的数字列表的中位数?我不明白维基百科所指的选择算法。如果你能解释一下,可以获得奖励积分。
答案 0 :(得分:3)
最佳算法是QuickSelect
阅读文章并尝试了解QuickSort - 概念类似。
答案 1 :(得分:2)
如果您想要快速编程方式,请对列表进行排序并选择中间元素(或两个中间元素的平均值)。
更高效的选择算法本质上是试图避免对列表中的位进行排序,而这些位实际上并不需要排序以找到给定 n 的 n 元素。 (JDK目前不提供开箱即用的算法。)更新:为了扩展我之前的帖子,更有效的方法示例包括:
答案 2 :(得分:2)
您基本上有两个主要选择:
简单快捷的方法 - 在O(nlogn)
中对列表进行排序。由于中位数被定义为值的一半大于它的值,而一半的值更小,因此只需取n/2
个值 - 即中位值。
如果这是一项性能至关重要的任务,您可以应用各种选择算法,这些算法可以在良好的情况下为您提供O(n)
(但在最坏的情况下仍然无法保证线性)。
在任何情况下,请查看Selection Algorithms上的维基百科条目,该条目应该会为您提供有关所有可用方法的精彩汇总。
答案 3 :(得分:-1)
中位数是排序列表中间的数字。 (对于具有不均匀条目数的列表很容易,对于具有偶数条目的列表,它可以是包括两个“中间数字”之间的任何数字)
然后对列表进行排序,找出中间数字是什么。