合并有序数组,空间复杂度为o(1)

归并排序中的合并两个有序数组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
    
            
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容