算法从具有奇数个元素的数组中查找中值

时间:2016-09-13 01:02:21

标签: algorithm sorting

我想知道是否存在一种算法来查找奇数长度数组的中位数。显然,人们可以对数组进行排序并占据中间位置,但理想情况是只对中位数感兴趣,可以在算法的时间复杂度方面获得收益。

如果不存在这样的算法,那么关于如何开发这种算法的任何建议都会很棒。

由于

3 个答案:

答案 0 :(得分:0)

这是由selection algorithm解决的,可以在O(n)时间内完成。 Quickselect,或其改进的内省选择,是流行的方法。

quickselect的一个非常简短的摘要是运行quicksort,但不是在每一步中对两半进行排序,而是只对包含您正在寻找的元素的一半进行排序,这可以通过计算有多少元素来确定。每个分区。

例如,C ++实际上将其作为标准库函数:nth_element

答案 1 :(得分:0)

你可以使用Selection algorithm找到数组的第k个最小元素,其中k是数组大小的一半。

对于非结构化数据,它位于O(n)

之内

但请记住,理论上的复杂性并非一切!

另请阅读this question

答案 2 :(得分:0)

是的,存在一种算法。你要讨论的问题是找到第k个最大元素,其中k是数组长度的一半+ 1的值。以下是在O(n)时间内Median of medians进行此操作的方法的链接。