如果数组的大小是偶数而不是奇数,那么数组的哪个元素将是中位数?

时间:2012-01-02 17:39:17

标签: quicksort

我读到可以在O(nlogn)

进行快速排序

算法在每一步说明选择中位数作为支点

但是,假设我们有这个数组:

10 8 39 2 9 20

哪个值是中位数?

在数学中,如果我记得正确的话,中位数是(39 + 2)/ 2 = 41/2 = 20.5

虽然

我的数组中没有20.5

提前致谢

4 个答案:

答案 0 :(得分:4)

你可以选择其中任何一个;如果您将输入视为限制,那么随着它的扩大而无关紧要。

答案 1 :(得分:1)

我们在这里讨论算法描述的确切措辞,而且我没有你所指的文字。但我认为在上下文中它们可能意味着“中位数”,而不是列表中值的数学中位数,而是列表中的中间点,即中位数INDEX,在此cade中将为3或4.作为coffNjava说,你可以带任何一个。

答案 2 :(得分:0)

实际上是通过首先对数组进行排序来找到中位数,因此在您的示例中,通过将数字排列为2 8 9 10 20 39找到中位数,中位数将是两个中间元素的平均值,(9+ 10)/ 2 = 9.5,这对你没有任何帮助。使用中位数是一种理想的情况,但如果数组至少已经部分排序,我会这样做。

使用偶数数组,您无法找到确切的轴心点,因此我相信您可以使用任一中间数字。它会略微提高效率,但不会大幅度提高,除非你总是最终对数组进行排序。

答案 3 :(得分:0)

找到未排序数字的中位数可以在O(N)时间内完成,但为了快速排序的目的,找不到真正的中位数并不是必需的。你只需找到一个合理的支点。

作为Wikipedia entry for quicksort says

  

在quicksort的早期版本中,通常会选择分区最左边的元素作为pivot元素。不幸的是,这会导致已经排序的数组的最坏情况行为,这是一个相当常见的用例。通过选择枢轴的随机索引,选择分区的中间索引或(特别是对于较长的分区)选择分区的第一个,中间和最后一个元素的中位数(如建议的那样),可以轻松解决问题。 R. Sedgewick)。

找到三个值的中位数比找到整个值集合要容易得多,对于具有偶数个元素的集合,找到两个“中间”元素中的哪一个并不重要潜在的支点。