堆
为什么堆排序没有快速排序快?
堆排序是一种原地的、时间复杂度为O(nlogn)的排序算法
- 堆是一棵完全二叉树
- 堆中每一个节点的值都必须大于等于(或者小于等于)其子树中每个节点的值
如何实现一个堆?以大顶堆为例子
完全二叉树比较适合用数组来存储。用数组存储非常节省存储空间,单纯通过数组下标就可以找到一个节点的左右子节点和父节点。
堆的插入数据
1 | public class Heap { |
删除堆顶元素
1 |
|
建堆
1 |
|
堆排序
1 |
|
- 堆排序数据访问的方式没有快速排序友好。
快速排序 数据是顺序访问的 对于堆来说 数据是跳着访问的
- 对于同样的数据 排序过程中 堆排序算法的数据交换次数要多于快速排序。