我有一个问题,我的老师在他的讲座中快速选择算法,他说在我们将数组视为5个元素的组之后;它不需要对每个组进行排序,他是否正确?因为当我们有像< 3,5,7,6,1>这样的小组时没有排序我们如何找到中位数???感谢
已编辑:它不是关于快速选择它是关于线性一般选择算法
答案 0 :(得分:0)
如果您需要的只是中位数,那么首先对其进行排序可能比仅仅运行选择排序的半版本更昂贵,具体取决于您的排序算法。在n个元素的数组中,您知道如果n是奇数,则中位数将是中间(n / 2 + 1)元素,或者如果是偶数,则中位数将是两个中间元素(n / 2,n / 2 + 1)的平均值。因此,执行正常的选择排序,但不是运行整个O(N)操作,而是仅运行一半以获得所选的中值。
您也可以进行非常简单的冒泡排序,但只能运行n / 2次。这将确保中位数在中间,并且在概念上很容易。如果您对此表示怀疑,请在纸上手动完成。
答案 1 :(得分:0)
中位数是排序顺序中的floor(n / 2) + 1
最小元素,selection algorithm可以在O(n)
中找到该元素(为方便起见,将n
视为奇数)。因此,如果您知道k
左侧的所有元素都小于k
,而右侧的所有元素都大于k
且k
位于floor(n / 2) + 1
{1}},然后您知道k
是中位数。你不需要排序。
例如:
8 3 11 20 18
=> 11
是中位数,因为它位于中间且比之后的所有内容都小,而且比之前的所有内容都要大。无需排序。
选择算法有很多变种。所有这些基本思想都是一样的,但有些细节可能会有所不同。如果您需要更多本地化帮助,请发布您的教师实施并尝试澄清您的问题。