python-算法-排序-堆排序

版权声明:左右代码均为自己总结,若有雷同请勿模仿 https://blog.csdn.net/weixin_44253023/article/details/89634383

def sift(data,low,high):
i=low
j=2i+1
tmp=data[i]
#孩子在堆里
while j<=high:
#如果右孩子比左孩子大,指向右孩子
if j<high and data[j]<data[j+1]:
j+=1
if data[j]>tmp:
data[i]=data[j]
i=j
j=2
i+1
else:
break
data[i]=tmp

def heap_sort(data):
#建立堆
n=len(data)
for i in range(n//2-1,-1,-1):
sift(data,i,n-1)
#选出新领导,继续调整构建堆
for i in range(n-1,-1,-1):
data[0],data[i]=data[i],data[0]
sift(data,0,i-1)

import random
ls=[1,2,3,4,5,6,7,8,9]
random.shuffle(ls)
print(ls)
heap_sort(ls)
print(ls)

猜你喜欢

转载自blog.csdn.net/weixin_44253023/article/details/89634383