python-堆排序

class Empty:
    pass
class Heap:#实现递增排序
    def __init__(self,list=[]):
        self._data=list
        self._cur=len(self._data)-1
    def _parent(self,j):#返回父节点
        return (j-1)//2
    def _left(self,j):#返回左孩子节点
        return 2*j+1
    def _right(self,j):#返回右孩子节点
        return 2*j+2
    def _has_left(self,j,lens):
        return self._left(j)<lens
    def _has_right(self,j,lens):
        return self._right(j) < lens
    def _swap(self,i,j):
        self._data[i],self._data[j]=self._data[j],self._data[i]
    def _upheap(self,j):
        parent=self._parent(j)
        if j>0 and self._data[j]>self._data[parent]:
            self._swap(j,parent)
            self._upheap(parent)
    def _downheap(self,j):
        if self._has_left(j,self._cur+1):
            left=self._left(j)
            bigchild=left
            if self._has_right(j,self._cur+1):
                right=self._right(j)
                if self._data[right]>self._data[left]:
                    bigchild=right
            if self._data[bigchild]>self._data[j]:
                self._swap(bigchild,j)
                self._downheap(bigchild)
    def heaporder(self):
        while self._cur!=0:
            start=self._parent(self._cur)
            for i in range(start,-1,-1):
                self._downheap(i)
            self._swap(0,self._cur)
            self._cur-=1
    def print_list(self):
        for i in self._data:
            print(i,end=' ')
list=[3,4,5,7,11,100,1,2,6,7,7,1,1000]
heap=Heap(list)
heap.heaporder()
heap.print_list()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值