归并排序中的合并两个有序数组num1,num2,可以通过比较两个数组中的第一个元素,取比较小的那个值,插入一个新的数组,然后继续比较剩下的数值。假设两个数组的长度分别为m,n ,这样实现的空间复杂度为O(m+n)
如果想要优化为空间复杂度为o(1) (假设num1的空间足够容纳m+n个元素), 可以采用从后往前比较的方式,将较大的数字插入num1的尾部,然后依次往前。
python 实现:
def merge_sort(array1,array2,m,n):
i ,j =m-1, n-1
k = m+n-1
while i>=0 and j >=0:
if array1[i]>array2[j]:
array1[k]=array1[i]
i-=1
k-=1
else:
array1[k]=array2[j]
j-=1
k-=1
while j>=0:
array1[k]=array2[j]
j-=1
k-=1
if __name__ == "__main__":
array1 = [2,4,6,8]
m = len(array1)
array2 = [1,3,5,7]
n = len(array2)
array1 [m:] = array2[:n]
print array1
merge_sort(array1,array2,m,n)
print array1