python 堆的操作

 #coding=utf-8 

import math
import random


def getRandomList(n):
    i=0
    lists=[]
    
    while i<n:
        lists.append(random.randint(1,100))
        i+=1
    return lists


def PARENT(i):
    return (i//2)
def LEFT(i):
    return 2*i
def RIGHT(i):
    return 2*i+1
def swap(A,i,j):
    r=A[i]
    A[i]=A[j]
    A[j]=r
    


def MAXHEAPIFY(A,i):
    l=LEFT(i)
    r=RIGHT(i)
    if l<=Aheapsize and r<Aheapsize and A[l]>A[r]:
        largest=l
    else:
        largest=i
    if r<=Aheapsize and A[r]>A[largest]:
        largest=r
    if largest != i:
        swap(A,i,largest)
        MAXHEAPIFY(A,largest)


def BuildMaxHeap(A):
    global Aheapsize
    Aheapsize=len(A)
    a=list(range(0,Aheapsize//2))
    #a.reverse()
    print(a)
    for i in a:
        print(i)
        MAXHEAPIFY(A,i)
    print("chongguohou")
    print(A)


def HeapExtractMax(A):
    if Aheapsize<1:
        raise OverflowError
    maxnum=A[1]
    A[1]=A[Aheapsize]
    Aheapsize=Aheapsize-1
    MAXHEAPIFY(A,1)
    return maxnum


def HeapIncreaseKey(A,i,key):
    if key<A[i]:
        raise OverflowError
    A[i]=key
    while i>1 and A[PARENT(i)]<A[i]:
        swap(A[i],A[PARENT(i)])
        i=PARENT(i)
def MaxHeapInsert(A,key):
    Aheapsize=Aheapsize+1
    A[Aheapsize]=-(math.inf)
    HeapIncreaseKey(A,Aheapsize,key)
#A=getRandomList(10)
A=[1,2,3,4,7,8,9,10,14,16]
random.shuffle(A)
print(A)
BuildMaxHeap(A)




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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值