查找数组的中位数

jrw*_*r14 0 ruby arrays median

我编写了一些返回未排序的奇数数组的中位数的代码,但没有返回偶数数组的中位数。

我知道,为了找到偶数数组的中位数,必须取数组的中间两个数字取它们的平均值,这就是中位数。我无法将其转换为可用的代码。除了这段代码的明显冗长之外,问题似乎出在第7-8行,我不明白为什么。

我更喜欢提示而不是答案,但是,如果您要发布一些固定的代码,我也可以接受。

def media(array)
  sorted = array.sort
  list = sorted.length
  if list %2 != 0
    (list + 1) / 2.0
  else
    even = ((list.to_f + 2) / 2) + ((list.to_f / 2)
    return (even/2)
  end
end
Run Code Online (Sandbox Code Playgroud)

pjs*_*pjs 6

我要在这里提出解决方案...

def median(ary)
  mid = ary.length / 2
  sorted = ary.sort
  ary.length.odd? ? sorted[mid] : 0.5 * (sorted[mid] + sorted[mid - 1])
end
Run Code Online (Sandbox Code Playgroud)

编辑-我已经.odd?按照BroiSatse的建议进行了合并。

  • @CarySwoveland我更喜欢坚持统计学的定义,它表示中位数是两件事之一,即原始值或两个值的平均值,这取决于集合的基数是偶数还是奇数。如果有人要使用中位数进行后续操作,则由他们来确保他们以与要执行的操作一致的方式使用中位数。 (4认同)