1. 堆排序
堆排序是通过构建一个最大堆实现的。
- 步骤1:先从非叶子节点向下调整元素,形成一个最大堆;
- 步骤2:然后将堆顶元素与未排序序列末尾的元素交换,再从根节点调整形成一个最大堆;
- 重复步骤2直到排序完成
def sift_down(array, root, end):
# 从root开始向下调整元素
while True:
child = 2*root + 1
if child > end:
break
if child + 1 <= end and array[child] < array[child+1]:
child += 1
if array[root] < array[child]:
array[root], array[child] = array[child], array[root]
root = child
else:
break
def heap_sort(array, l, r):
# 从非叶子节点开始调整成最大堆
for i in range(len(array)//2-1, -1, -1):
sift_down(array, i, r)
# 进行堆排序
for i in range(r, 0, -1):
array[0], array[i] = array[i], array[0]
sift_down(array, 0, i-1)
test = [2,3,