1、拆分数组
假设数组一共有 n 个元素,我们递归对数组进行折半拆分即n//2
,直到每组只有一个元素为止。
2、合并数组
算法会从最小数组开始有序合并,这样合并出来的数组一直是有序的。合并的时候会有两个指针从0开始,指针指向的数逐个比较,把较小的存进结果数组,较小数的指针向右边移动一个单位,直到任意一个指针结束,然后把两个数组剩下的数拼接到结果数组后面
def merge(list_left, list_right):
l, r = 0, 0
new_list = []
while l < len(list_left) and r < len(list_right):
if list_left[l] < list_right[r]:
new_list.append(list_left[l])
l += 1
else:
new_list.append(list_right[r])
r += 1
new_list += list_left[l:]
new_list += list_right[r:]
return new_list
def merge_sort(list):
if len(list) <= 1:
return list
mid = len(list) // 2
list_left = merge_sort(list[:mid])
list_right = merge_sort(list[mid:])
return merge(list_left, list_right)
if __name__ == "__main__":
print(merge_sort([2, 4, 1, 7, 10, 6, 8]))