–归并排序算法思路:先将数组不断均分成两堆,直至只有一个元素,再两两进行排序合并。使用了大量了额外数组空间,但减少了比较次数和写操作。时间复杂度与空间复杂度将再排序算法总结里面讨论。
下面直接展示算法:
def merge_sort(nums):
#nums为list类型
#分解数组直至数组长度小于1
while len(nums) <= 1:
return nums
mid = len(nums)//2
left = merge_sort(nums[:mid])
right = merge_sort(nums[mid:])
#分解完毕后调用归并函数
return merge(left,right)
def merge(left,right):
#left 和 right 均为list类型
#归并函数
#左右数组的初始指针位置与返回函数的定义
l, r = 0,0
result = []
while l < len(left) and r < len(right):
if left[l] <= right[r]:
result.append(left[l])
l += 1
else:
result.append(right[r])
r += 1
#当两数组长度不一致时,将剩余的数组直接添加至末尾
#(由于前面的数据均已比较排序,所以直接添加至尾部即可)
result += right[r:]
result += left[l:]
return result
nums = [3,34,1,34,345,6,445,1,2]
a = merge_sort(nums)
print(a)