可以使用快速选择算法来实现。这是一种在线算法,意味着它可以处理海量数据而无需将数据完全加载到内存中。
以下是一个例子,它使用了 Python 的 heapq 库来实现快速选择算法:
import heapq
def find_median(numbers):
# 将数字加入小根堆和大根堆
min_heap = [] # 存储较大的一半数字
max_heap = [] # 存储较小的一半数字
for number in numbers:
heapq.heappush(max_heap, -heapq.heappushpop(min_heap, number))
if len(max_heap) > len(min_heap):
heapq.heappush(min_heap, -heapq.heappop(max_heap))
# 如果数字总数为奇数,则中位数为小根堆堆顶
if len(numbers) % 2 == 1:
return min_heap[0]
# 如果数字总数为偶数,则中位数为两个堆顶的平均数
return (min_heap[0] - max_heap[0]) / 2
这段代码的时间复杂度是 O(n * log n),其中 n 是数字的数量。
需要注意的是,这段代码无法处理负数。如果数据集中有负数,则需要对代码进行修改,才能处理负数。