【发布时间】:2012-07-05 18:37:00
【问题描述】:
在最近的一次微软采访中提出了以下问题
给定一个大小为 5 的未排序数组。 需要多少次最小比较才能找到中位数?然后他将其扩展为 n 大小。
我认为 5 个元素的解决方案是 6 个
1) use 3 comparisons to arrange elements in array such that a[1]<a[2] , a[4]<a[5] and a[1]<a[4]
a) compare a[1] and a[2] and swap if necessary
b) compare a[4] and a[5] and swap if necessary
c) compare a[1] and a[4].if a[4] is smaller than a[1] , then swap a[1] wid a[4] and a[2] wid a[5]
2)if a[3]>a[2].if a[2]<a[4] median value = min(a[3],a[4]) else median value=min(a[2],a[5])
3)if a[3]<a[2].if a[3]>a[4] median value = min(a[3],a[5]) else median value=min(a[2],a[4])
这可以扩展到 n 个元素。如果不是,除了快速选择之外,我们如何在 O(n) 中找到 n 个元素中的中位数
【问题讨论】:
-
您可能想稍微改进一下标记。您可以使用有序列表 (
1.),它们也可以嵌套。 -
@akash:接受您的其他问题的答案(也就是说,如果答案回答了您的问题,请单击“绿色复选标记”)。
-
@ColinD 感谢“中位数”算法。