[硕.Love Python] Heap(堆)

class  MinHeap( object ):
     def  __init__( self , iterable = ()):
         self .array  =  [ None ]
         self .array.extend(iterable)
         self .build()
 
     def  build( self ):
         a, size  =  self .array,  self .size()
         for  in  xrange (size  /  2 0 - 1 ):
             =  2  *  i
             while  c < =  size:
                 if  +  1  < =  size  and  a[c + 1 ] < a[c]:
                     + =  1
 
                 if  a[c] > a[c / 2 ]:
                     break
 
                 a[c], a[c / 2 =  a[c / 2 ], a[c]
                 * =  2
 
     def  insert( self , k):
         self .array.append(k)
         a, i  =  self .array,  self .size()
 
         while  i >  1  and  k < a[i / 2 ]:
             a[i]  =  a[i / 2 ]
             / =  2
 
         a[i]  =  k
 
     def  pop( self ):
         size  =  self .size()
         if  size  = =  0 :
             raise  IndexError( 'pop from empty heap' )
 
         =  self .array
         res  =  a[ 1 ]
         last  =  a.pop()
         size  - =  1
 
         if  size >  0 :
             =  2  *  1
 
             while  c < =  size:
                 if  +  1  < =  size  and  a[c + 1 ] < a[c]:
                     + =  1
 
                 if  a[c] > =  last:
                     break
 
                 a[c / 2 =  a[c]
                 * =  2
 
             a[c / 2 =  last
 
         return  res
 
     def  size( self ):
         return  len ( self .array)  -  1
 
if  __name__  = =  '__main__' :
     from  random  import  shuffle
     data  =  range ( 50 )
     shuffle(data)
     print  data
     =  MinHeap(data)
 
     for  in  xrange ( len (data)):
          print  h.pop()


刘硕老师Python精品课程:

Python高级编程技巧实战》:

http://coding.imooc.com/class/62.html

 

Python算法实战视频课程》:

http://edu.csdn.net/combo/detail/174

 

Python科学计算—NumPy实战课程》:

http://edu.51cto.com/course/course_id-5046.html

 

熊猫TV直播间:

http://www.panda.tv/671023

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值