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

版权声明: https://blog.csdn.net/Wang_Jiankun/article/details/82497439

堆排(Heap Sort)


1、概念

完全二叉树特点:
这里写图片描述
对于完全二叉树中任一点 i:

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

最小二叉堆:根节点的值小于子树的任一元素,对于子树也一样。
这里写图片描述

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


2、插入元素

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

插入14:
这里写图片描述
这里写图片描述

复杂度:

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

3、删除最小元素

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

删除:
这里写图片描述
这里写图片描述
这里写图片描述

复杂度: O(logN)


4、排序

时间复杂度为O(N logN)

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

猜你喜欢

转载自blog.csdn.net/Wang_Jiankun/article/details/82497439