#堆排序
def adjust(lst,beg,end,isBeg = True):
i = 0
if end ==1:
i = 0
else:
i = int((end - 2)/2) + (end - 2)%2
rang = None
if isBeg:
rang =range(i +1)
else:
rang =range(i,-1,-1)
for j in rang:
right = 2*j + 2
left = 2*j +1
if right <= end and lst[right] >lst[j]:
if lst[right] > lst[left]:
lst[j],lst[right] = lst[right],lst[j]
else:
lst[j],lst[left] = lst[left],lst[j]
elif lst[left] > lst[j]:
lst[j],lst[left] = lst[left],lst[j]
#paixu
def duisort(lst):
length = len(lst)
if length <=1:
return
#从下往上
adjust(lst,0,length -1,False)
#从上往下
adjust(lst,0,length -1)
for i in range(length -1,0,-1):
lst[0],lst[i] = lst[i],lst[0]
#从上往下
adjust(lst,0,i-1)
print(lst)
if __name__ == "__main__":
lst = [7,23,4,6,7,8,22,33,5,767,8,99,3,234]
#lst = [9,4,5,6,8,10,2,17,11,3,2]
#lst = [16,7,3,20,17,8]
duisort(lst)
print(lst)
算法_堆排序_python
最新推荐文章于 2024-09-01 17:19:15 发布