说起来确实简单,但是:
Talk is cheap, show me the code.
”
信不信,虽然我已经把原理告诉了你,但是现在给你30分钟的时间,你可能也无法把代码写出来。...第350行,向 h 列表中添加一个列表:[next(), order * direction, next],如果我们使用A = [1, 2, 3, 4, 5, 6]来作为例子的话,那么首先添加到 h 列表中的数据是...有两个列表:a = [1, 2, 3]和b=[4, 5, 6],在 Python 里面执行b > a会返回 True,如下图所示:
实际上,它的原理就是一项一项对比列表中的每个元素。...由于要对每个元素都进行对比,这就要求列表中的当前被对比的元素是可以比较大小的。但是迭代器是不能对比大小的。
回来我们的算法中,当 h 中的子列表第一个数字相同时,就会开始对比第二个数。...调整完成以后,进行下一轮循环,继续弹出堆顶列表下标为0的元素,更新堆顶……
由于不同的列表长度不同,当某个列表耗尽以后,迭代器就会抛出StopIteration异常,于是堆元素就减少,直到减到1个以后,