堆是一种树形数据结构,而且数据保存在数组中。而且堆非常适用于实现优先队列。
堆排序利用建堆等操作,可以实现较为高效的排序。
实现堆排序需要实现shift down、建堆等操作。
首先是从后往前,首先找到第n / 2这位,它肯定是树的倒数第二排,然后开始交换,把最大数换过来,如果交换了的话下面那个节点也得考虑再交换一次。这样一步步往前推就可以实现建堆了。
首先定义创建堆的函数,就是传入个数组。注意中间值,也就是开始的节点是middle,而且要倒叙执行。
def build_heap(a):
# a, the array
middle = len(a) / 2
for i in range(middle)[::-1]:
print(i)
然后是交换位置,而且要继续排序,这就需要传入数组和位置i了。