堆排序

堆排序(Heap Sort)是一种基于堆数据结构的排序算法。

堆的定义

堆是一棵完全二叉树,树的根节点永远比它的孩子节点大(大根堆)或小(小根堆)。

数组模拟

为了节省空间,并不需要真正构建树结构,而是用数组下标来模拟树结构。

建堆过程:从最后一个非终端节点(非叶子结点)开始向前建堆,因为终端节点没有子节点。

构建大根堆

从最后一个非终端节点开始比较其与孩子节点的大小:

  • 如果该节点大于两个孩子节点,则略过
  • 否则与孩子节点中较大的一个进行交换,并继续与交换后的孩子节点进行比较调整

算法分析

  • 时间复杂度:O(n log n)
  • 空间复杂度:O(1)
  • 稳定性:不稳定

链接到