编辑代码

from math import *
ls=[1,3,4,5,7,2,6,8,0]


def heapchange(i):
    n=len(ls)
    a,b,c=i,i*2,i*2+1
    a,b,c=a-1,b-1,c-1
    if b<n and ls[a]<ls[b]:
        ls[a],ls[b]=ls[b],ls[a]
        heapchange(b+1)
    if c<n and ls[a]<ls[c]:
        ls[a],ls[c]=ls[c],ls[a]
        heapchange(c+1)

def ify():
    n=len(ls)
    depth=ceil(log2(n+1))-1
    num=depth**2-1

    for i in range(num,0,-1):
        heapchange(i)

def heapsort():
    for _ in range(len(ls)):

        heappop()

def heappush(val):
    ls.append(val)
    n=len(ls)
    while(n!=1):
        if ls[n-1]>ls[n//2-1]:
            ls[n-1],ls[n//2-1]=ls[n//2-1],ls[n-1]
            n=n//2
        else:
            return

def heappop():
    print(ls[0])
    ls[0],ls[-1]=ls[-1],ls[0]
    ls.pop()
    heapchange (  1 )

ify()

# heapsort()

heappush(70)
heappush(7.5)
heappop()

heapsort()
print(ls)