将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)
'''