时间复杂度:O(nlogn)
空间复杂度: O(n)
#归并排序的思想就是将数组元素不断的划分,划分为单个元素后进行数组有序合并
#1.两个有序数组的合并
#2.划分合并
def merge(arr, left, right):
#对两个有序数组进行合并,当数组元素为一时自然有序。
l = 0
r = 0
res = []
while l < len(left) and r < len(right):
if left[l] < right[r]:
res.append(left[l])
l += 1
else:
res.append(right[r])
r += 1
res += left[l:]
res += right[r:]
return res
def merge_sort(arr):
#递归结束条件,划分到数组只剩下一个元素,则停止递归
if len(arr) <= 1:
return arr
mid = len(arr) // 2
#将数组从中间拆分成为两个部分
left = merge_sort(arr[:mid])
right = merge_sort(arr[mid:])
#对数组进行合并
return merge(arr, left, right)
arr = [12, 3, 42, 9, 2, 54, 32]
print(merge_sort(arr))