Skip to content

Latest commit

 

History

History
33 lines (17 loc) · 920 Bytes

018堆排序.md

File metadata and controls

33 lines (17 loc) · 920 Bytes

堆排序

什么是堆

堆是一种树形数据结构,而且数据保存在数组中。而且堆非常适用于实现优先队列。

什么是堆排序

堆排序利用建堆等操作,可以实现较为高效的排序。

实现堆排序需要实现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了。