【发布时间】:2015-10-07 21:18:18
【问题描述】:
我需要在不排序或复制数组的情况下找到数组的中位数。
数组存储在 cuda 程序的共享内存中。将其复制到全局内存会减慢程序速度,并且共享内存中没有足够的空间来复制它。
我可以使用两个“for”循环并遍历每个可能的值并计算有多少值小于它,但这将是 O(n^2)。不理想
现在有人知道解决我的问题的 O(n) 或 O(nlogn) 算法吗?
谢谢。
【问题讨论】:
-
可能是QuickSelect?
-
@higuaro 我不确定如何在不对数组进行排序的情况下实现 QuickSelect。也许我错了。
-
@user403348255 这个问题实际上并没有解决无法对数组进行排序的问题。
-
@Gottfried QuickSelect 不一定会对您的数组进行排序,它只会在搜索期间围绕所选枢轴重新排序数据。该算法不需要排序数组作为输入