L = [49,38,65,97,76,13,27,49]
def swap(list, a, b):
temp = list[a]
list[a] = list[b]
list[b] = temp
def adjust_heap(numbers, i, length):
"""从第i个位置开始调整使得成为最大堆"""
while i < length:
k = 2 * i + 1
if k + 1 < length and numbers[k] < numbers[k+1]:
k += 1
if k < length and numbers[i] < numbers[k]:
swap(numbers, i, k)
i = k
else:
break
def top_heap_sort(numbers):
length = len(numbers)
for i in range(length//2, -1, -1):
"""从后往前调整使得成为最大堆"""
adjust_heap(numbers, i, length)
for i in range(length-1, -1, -1):
"""交换元素,记录最大的元素"""
swap(numbers, 0, i)
"""从头调整成为最大堆"""
adjust_heap(numbers, 0, i)
print(numbers)
top_heap_sort(L)