方法一:
采用归并排序部分实现,生成一个新的有序数组,然后再取新数组的中位数
有序数组的中位数,数组为奇数为 数组中间的书
数组为偶数,则为数组中间相邻的2个数的平均数
#对于给定的两个数组,合并成一个有序的数组
def merage(left, right):
result = []
while left and right:
if left[0] < right[0]:
result.append(left.pop(0))
else:
result.append(right.pop(0))
while left:
result.append(left.pop(0))
while right:
result.append(right.pop(0))
return result
#获取有序数组的中位数
def median(arr):
if len(arr) < 2:
return arr[0]
result = 0
avg_index = round(len(arr)/2)
if len(arr) % 2 == 0:
result = (arr[avg_index -1] + arr[avg_index])/2.0
else:
result = arr[avg_index]
return result
if __name__ == "__main__":
conbine_arr = merage([1, 3], [2])
ret = median(conbine_arr)
print(conbine_arr, ret)
时间复杂度:遍历全部数组 (m+n)(m+n)
空间复杂度:开辟了一个数组,保存合并后的两个数组 O(m+n)O(m+n)
补充对于归并排序的分析:
方法二:
因为是有序数组,考虑到可以使用二分法查找,