首先要看懂归并排序就先要学习递归![](https://i-blog.csdnimg.cn/blog_migrate/1f2e267ee18db71898b1ac641f3910fe.jpeg)
怎么学习递归?最佳答案:http://www.baidu.com
![](https://i-blog.csdnimg.cn/blog_migrate/9b915af2bf3143168d5114591e0e6d26.gif)
好然后就是学习归并的基础思想
就是将数据分组然后进行比较
进行比较后“合体”
从小开始比较:
14和22比 14<22
14先下 然后22和23比 22<23
23先下 。。。。以此类推到完成
注意:就会有人问万一一边走完了一边还剩咋办?直接加上就好了因为在总排序前所有的都已经相对已经有序了
代码:
def merge(left, right):
# 合并两个有序列表
s = []# 储存列表
while len(left) > 0 and len(right) > 0:# 两旁只要有一个还剩就不会停
if left[0] < right[0]:
s.append(left.pop(0))
# pop的作用
# list.pop([index = -1])
# 移除列表中的一个元素(默认最后一个元素),并且返回该元素的值
else:
s.append(right.pop(0))
# 比完后那边还剩就把那边剩于的加入储存列表中
if left:
s.extend(left)
if right:
s.extend(right)
return s
def mergeSort(arr):
# 归并函数
n = len(arr)
if n < 2:
return arr
middle = n // 2
#列表中的知识自己www.baidu.com
left = arr[:middle] # 取序列左边部分
right = arr[middle:] # 取序列右边部分
# 对左边部分序列递归调用归并函数
left1 = mergeSort(left)
# 对右边部分序列递归调用归并函数
right1 = mergeSort(right)
return merge(left1, right1)
if __name__ == '__main__':
a = [4, 7, 8, 10, 3, 5, 9]
print(mergeSort(a))