我去找了个视频
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!!=- =
后我又回来了 思想还是要捋一捋
讲的内容是差不多的 和别人写的
不断划分的过程
不断调用至不可分割
我们把东西都放在result里
拆开来是拆成两个有序序列(视频中用的是切片)
然后我们就不断的递归 递归到能直接返回start的值
执行下一句代码 在调用连接 得到一个result
在回到递归中 得到另外一个result
再连接成一个新的result
递归========》视频讲的不错
突然想到=- = atom有没有打断点的
这好像打断点能解决的= -=