def sift(list,low,high):
#list:列表
#low:堆的根节点的位置
#high:堆的最后一个元素的位置
i=low
j=2*low+1
tmp=list[low]#堆顶元素存下来
while j<=high:
if j+1<=high and list[j+1]>list[j]:# 得保证有有孩子结点
j=j+1#j指向右孩子
if list[j]>tmp:
list[i]=list[j]
i=j
j=2*i+1
else:
list[i]=tmp
break
else:
list[i]=tmp#把tmp放在叶子节点上
# 建堆
def heap_sort(list):
for i in range((len(list)-2)//2,-1,-1):
sift(list,i,len(list)-1)
for i in range(len(list)-1,-1,-1):
list[0],list[i]=list[i],list[0]
sift(list,0,i-1)
堆排序代码 从小到大排序
最新推荐文章于 2023-02-10 08:30:00 发布