优先队列:
具有FISO(firt in smallest out 先进,最小的出)行为特征
支持两种操作:
Insert :将新到的元素加入队列
Extract-Min :删除或返回最小(最大)的元素
堆 是一个可以被看成一颗完全二叉树的数组对象
1)除了最下层,所有层的元素都是满的
2)最下层元素集中在堆的左侧
分类:小根堆(子节点元素>父节点元素),大根堆(子节点元素<父节点元素)
特性:对于包含n个元素的大根堆/小根堆可以高效的执行以下操作
Insert in O(log n)time; Extract-Min in O(log n)time;
堆的操作:
1. Insert 操作:
1.1)将元素插入到堆尾
1.2)如果不符合小根堆/大根堆的性质,进行交换
2.Extract-Min操作:
2.1)弹出根结点元素,并将堆的最后一个结点放到根结点
2.2)如果不符合小根堆/大根堆的性质,进行交换调整(与子结点中较小的那个交换位置)
3.堆排序Heapsort:
3.1升序排序
步骤1:将元素逐个插入,构造小根堆(Insert 操作);
2:(Extract-Min操作)
3.2降序排序
步骤1:将元素逐个插入,构造大根堆(Insert 操作);
2:(Extract-Min操作)