我去找了个视频
https://www.bilibili.com/video/av17888875?from=search&seid=15493090710265132375
理论上讲是:把这个数列切成一块块不可分割的 再比大小连接在一起 放在一个result里
其实这个代码是很巧妙的 巧妙在于**

递归

**
zed这个实验是基于双向链表。且数字是随机
我调试了数量(10个随机数)和输出(增加输出)
直接放源码= -= GitHub吧

https://github.com/theguyisnoone/impthw/tree/master/ex16
运行代码:

----
[10,8,None] [8,8,10] [8,None,8] [0,4,8] [4,10,None] [10,None,4] [0,3,10] [3,6,None] [6,7,3] [7,None,6]
None
>>>mid:5
>>>mid:2
>>>mid:1
merged_left[10,None,None],merged_right[8,None,None]
>>> [10,None,None] [8,None,None]
>>> [10,None,None] None
result[8,10,None]
>>>mid:1
>>>mid:1
merged_left[0,None,None],merged_right[4,None,None]
>>> [0,None,None] [4,None,None]
>>> None [4,None,None]
result[0,4,None]
merged_left[8,None,None],merged_right[0,4,None]
>>> [8,None,None] [0,4,None]
>>> [8,None,None] [4,None,None]
>>> [8,None,None] None
result[4,8,None]
result[0,4,None]
merged_left[8,10,None],merged_right[0,4,None]
>>> [8,10,None] [0,4,None]
>>> [8,10,None] [4,8,None]
>>> [8,10,None] [8,None,4]
>>> [10,None,8] [8,None,4]
>>> [10,None,8] None
result[8,10,4]
result[8,8,None]
result[4,8,None]
result[0,4,None]
>>>mid:2
>>>mid:1
merged_left[10,None,None],merged_right[0,None,None]
>>> [10,None,None] [0,None,None]
>>> [10,None,None] None
result[0,10,None]
>>>mid:1
>>>mid:1
merged_left[6,None,None],merged_right[7,None,None]
>>> [6,None,None] [7,None,None]
>>> None [7,None,None]
result[6,7,None]
merged_left[3,None,None],merged_right[6,7,None]
>>> [3,None,None] [6,7,None]
>>> None [6,7,None]
result[3,6,None]
merged_left[0,10,None],merged_right[3,6,None]
>>> [0,10,None] [3,6,None]
>>> [10,None,None] [3,6,None]
>>> [10,None,None] [6,7,3]
>>> [10,None,None] [7,None,6]
>>> [10,None,None] None
result[7,10,6]
result[6,7,3]
result[3,6,None]
result[0,3,None]
merged_left[0,4,None],merged_right[0,3,None]
>>> [0,4,None] [0,3,None]
>>> [4,8,None] [0,3,None]
>>> [4,8,None] [3,6,None]
>>> [4,8,None] [6,7,3]
>>> [8,8,4] [6,7,3]
>>> [8,8,4] [7,10,6]
>>> [8,8,4] [10,None,7]
>>> [8,10,8] [10,None,7]
>>> [10,None,8] [10,None,7]
>>> None [10,None,7]
result[10,10,8]
result[8,10,8]
result[8,8,4]
result[7,8,6]
result[6,7,3]
result[4,6,None]
result[3,4,None]
result[0,3,None]
result[0,None,None]
----
[0,None,None] [0,3,None] [3,4,None] [4,6,3] [6,7,4] [7,8,6] [8,8,7] [8,10,8] [10,10,8] [10,None,10]
None
.

我没有完全搞懂 但是 这个输出应该明显点
这个归并排序太负杂了 很多递归 还有个不知所谓的类 有所谓的确定头和尾 调用merge_node 去了
= -= 我的脑子很凌乱 看运行的时候看第一个value就行了
双向链表

l give up!!=- =

后我又回来了 思想还是要捋一捋
讲的内容是差不多的 和别人写的
笨办法学Python3续 Learn more python3 in hard way ex16 merge sort 归并排序(暂完!!!)
不断划分的过程
不断调用至不可分割
笨办法学Python3续 Learn more python3 in hard way ex16 merge sort 归并排序(暂完!!!)
我们把东西都放在result里
笨办法学Python3续 Learn more python3 in hard way ex16 merge sort 归并排序(暂完!!!)

拆开来是拆成两个有序序列(视频中用的是切片)
然后我们就不断的递归 递归到能直接返回start的值
执行下一句代码 在调用连接 得到一个result
在回到递归中 得到另外一个result
再连接成一个新的result

递归========》视频讲的不错

突然想到=- = atom有没有打断点的
这好像打断点能解决的= -=

相关文章: