堆排(Heap Sort)


1、概念

完全二叉树特点:
数据结构与算法(C++)– 堆排(Heap Sort)
对于完全二叉树中任一点 i:

  • 左孩子的位置为: 2i
  • 右孩子的位置为:2i+1
  • 父节点位置为:i/2 向下取整

最小二叉堆:根节点的值小于子树的任一元素,对于子树也一样。
数据结构与算法(C++)– 堆排(Heap Sort)

堆排实现:最小二叉堆,优先队列


2、插入元素

原理:在末尾插入,根据大小关系进行调整。

插入14:
数据结构与算法(C++)– 堆排(Heap Sort)
数据结构与算法(C++)– 堆排(Heap Sort)

复杂度:

  • 插入一个元素平均比较次数为2.607,移动1.607层。
  • 一次插入复杂度为平均为O(1),最差为O(logN)。

3、删除最小元素

原理:删除根节点,其它元素依次向上补空。

删除:
数据结构与算法(C++)– 堆排(Heap Sort)
数据结构与算法(C++)– 堆排(Heap Sort)
数据结构与算法(C++)– 堆排(Heap Sort)

复杂度: O(logN)


4、排序

时间复杂度为O(N logN)

  1. 逐个插入,建立二叉堆,O(N)
  2. 依次删除最小元素,O(N logN)
  3. 删除的元素依次存入新的数组,即得到升序数组

相关文章:

  • 2019-06-16
  • 2021-11-18
  • 2021-09-12
  • 2020-10-05
  • 2020-10-12
猜你喜欢
  • 2019-07-18
  • 2021-08-12
  • 2021-10-14
  • 2021-08-15
  • 2021-04-09
  • 2021-09-04
  • 2021-10-20
相关资源
相似解决方案