建立大根堆
1、建堆:(农村包围城市,建堆完成之后堆顶的数最大)
2、挨个出数
def sift(li, low, high):
i = low
j = 2*i+1
temp = li[low]
while j<=high:
if j+1 <= high and li[j+1] > li[j]:
j = j+1
if li[j]>temp:
li[i] = li[j]
i = j
j = 2*i+1
else:
li[i] = temp
break
else:
li[i] = temp
def heap_sort(li):
n = len(li)
for i in range((n-2)//2, -1, -1):
sift(li, i, n-1)
for i in range(n-1, -1, -1):
li[0], li[i] = li[i], li[0]
sift(li, 0, i-1)
a = [5,6,8,3,5,9,1,45]
heap_sort(a)
print(a)