堆
堆的性质
1.堆中某个节点的值总是不大于或不小于其父节点的值
2.堆总是一棵完全二叉树
堆是一个数据结构,实际是一棵完全二叉树,是使用数组存储的。
堆是非线性的
堆真正的价值是选数,是效率很高
小根堆:
1.完全二叉树
2.树中所有的父亲都是小于等于孩子
大根堆:
1.完全二叉树
2.树中所有的父亲都是大于等于孩子
注意:不代表从小到大存或从大到小存
小根堆大根堆存在的意义:
1.排序。堆排序O(N*logN),堆排序本质是一种选择排序。虽然不能保证有序,但是堆能选出最大或最小的数,对于解决top-k问题很有帮助。
那么排升序是建大堆还是小堆呢?
很多人觉得是建小堆,实际上建大堆好一点,
如果每次都是用建堆选数据,整体时间复杂度为O(N*N),因为建堆哦,关系乱了,只能再舰队选数,不是不可以,只是效率太差,没有使用到堆的优势