合并K个已排序数组(Python)

将K个已排序数组合并成一个数组,如merge([[2,4,5],[1,3,9],[6,7,8]]) = [1,2,3,4,5,6,7,8,9]

代码思路:

本题采用归并算法较为简单清晰。归并法的实现简单来说就是分治法的实现,讲一个大问题不停拆解,最后在将其合并。例如:

拿到一个长数组,将其不停的分为左边和右边两份,然后以此递归分下去。然后再将她们按照两个有序数组的样子合并起来。这样说起来可能很难理解,于是给出一张图。(此处借鉴https://www.cnblogs.com/piperck/p/6030122.html

关于归并算法的详细知识请自行查阅。

代码实现:

#采用归并排序算法
#拆解到最后,实际变成两个数组进行排序
def MergeSort(nums):
    #请牢记传入的参数是多维数组
    #此处是递归结束条件
    if len(nums) <= 1:
        return nums
    #取中间位置 
    mid = len(nums) // 2
    
    #此处实现递归
    #记住此处得到的也是多维数组
    Left = MergeSort(nums[:mid])
    
    Right = MergeSort(nums[mid:])

    #print(Left[0], Right[0])
    #要传入的参数是数组中第一个索引处的值
    return Sort_list(Left[0], Right[0])

def Sort_list(Left, Right):
    #存储排序后的值
    res = []
    a = 0
    b = 0

    while a < len(Left) and b < len(Right):
 
        if Left[a] < Right[b]:
            res.append(Left[a])
            a += 1
        else:
            res.append(Right[b])
            b += 1
    #因为存在一个到终点后,另一个还没到终点
    #这时就需要将没到终点的剩下的值添加到数组中
    while a < len(Left):
        res.append(Left[a])
        a += 1

    while b < len(Right):
        res.append(Right[b])
        b += 1
    #将一维数组二维化
    res = [res]

    return res

if __name__ == '__main__':
     b = MergeSort([[1,2,3],[2,3,5],[6,7,9],[7,8,9],[3,5,6]])
     print(b)
     '''
     #数组降维
     a = []   
     for i in b[0]:
         a.append(i)
     print(a)
     '''

 

猜你喜欢

转载自blog.csdn.net/Manson_Wang/article/details/82346768