说明
1、堆是一种用数据结构实现的算法:树,数组都可以。堆本身就是一棵完全二叉的树。
2、特点:所有父节点的值大于子节点的值。最小堆,所有父节点的值小于子节点的值。
实例
classHeap(object): def__init__(self,list=[]): self.root=None self.list=list self.tree=None self.len=len(list) #建堆 defbulid_heap(self): ifself.list!=[]: final_parent_node=int((self.len-1)/2) whilefinal_parent_node>=0: self.heapfy(final_parent_node,self.len) final_parent_node-=1 #交换当前节点和向下所有子节点的节点 defheapfy(self,node,len): node_left=2*node+1 node_right=2*node+2 max=node ifnode_left<lenandself.list[node_left]>self.list[max]: max=node_left ifnode_right<lenandself.list[node_right]>self.list[max]: max=node_right ifmax!=node: self.swap(max,node) self.heapfy(max,len) #交换元素的方法 defswap(self,i,j): self.list[j],self.list[i]=self.list[i],self.list[j] #堆排序 defheap_sort(self): len=self.len-1 whilelen>=0: self.swap(0,len) self.heapfy(0,len) len-=1 if__name__=="__main__": list=[5,7,3,1,10,0] heap=Heap(list) print("初始列表:{}".format(heap.list)) heap.bulid_heap() print("堆化:{}".format(heap.list)) heap.heap_sort() print("排序:{}".format(heap.list))
以上是python数据结构堆的介绍,希望对大家有所帮助。更多Python学习指导:基础教程python基础教程
本文教程操作环境:windows7系统Python 3.9.1,DELL G3电脑。