python之堆排序算法代码
以下是个人写的堆排序代码,原理我就不解释了(简单来说就是先建立一个大顶堆,然后进行顶点和最后节点的互换,互换之后需要重新建堆,两两比对,具体的话可以参照其他的,不过代码还是会于注释的。 #根据问题进行编码,由于数组下标是从0开始的,而树的节点从1开始,我们还需要引入一个辅助位置,Python提供的原始数据类型list实际上是一个线性(Array), #由于我们需要在序列最左边追加一个辅助位,线性表这样做的话开销很大,需要把数组整体向右移动,所以list类型没有提供形如appendleft的函数,但是在一个 #链表里做这种操作就很简单了,Python的collections库里提供了链表结构deque,我们先使用它初始化一个无序序列: from collections import deque #引用链表 def heap_adjust(data,start,length): #建一个大顶堆,上面最大,且父节点比左右两个子节点都要大 temp=data[start] #定义一个中间变量temp,代表父节点的值 left=start*2 #父节点下左节点的索引值 right=left+1 #父节点下右节点的索引值 while left<=length #主要在两两比对的时候需要用到while if left<length and data[left]<data[right]: