defheap_sort(li):
n=len(li)for i inrange((n-2)//2,-1,-1):#从0到最后一个节点的父节点#i表示建堆的时候调整堆的下标
sift(li,i,n-1)#n-1表示最后一个元素的下标#建堆完成#进入排序阶段for i inrange(n-1,-1,-1):# i 指向当前堆的最后一个元素
li[0],li[i]=li[i],li[0]#把最后一个元素移到堆顶,堆顶元素存起来
sift(li,0,i-1)#i-1是新的high(新的最后一个元素的位置)
li=[8,2,5,6,1,4]import random
#random.shuffle(li)
heap_sort(li)print(li)