堆排序思想:将数组想象成一个完全二叉树
堆排序原理:给定一个待排序序列,首先经过一次调整,将序列构建成一个大顶堆,此时第一个元素是最大的元素,将其和序列的最后一个元素交换,然后对前n-1个元素调整为大顶堆,再将其第一个元素和末尾元素交换,这样最后即可得到有序序列。
l = [5, 13, 26, 20, 15, 65, 41, 51]
def heap_sort(li, length):
i = length//2 - 1
while i >= 0:
heap_adjust(li, i, length)
i -= 1
j = 0
while j < length - 1:
li[0], li[length-j-1] = li[length-j-1], li[0]
heap_adjust(li, 0, length-j-1)
j += 1
def heap_adjust(li, index, length):
temp = li[index]
child = 0
while index*2+1 < length:
child = index*2+1
if child != length-1 and li[child] < li[child+1]:
child += 1
if temp > li[child]:
break
else:
li[index] = li[child]
index = child
li[index] = temp
hwq = heap_sort(l, len(l))
print(l)