jjzjj

数据结构--堆的实现-大根堆/小根堆/堆排序/堆排序稳定性证明/TOP-K

    前言     逆水行舟,不进则退!!!        目录    认识堆    堆的创建    1,向下调整的方法建立堆    2,以向下调整的方式建立小根堆    3,向上调整的方式建堆    堆的插入    堆的删除        堆排序     堆排序稳定性证明    TOP-K问题    实现堆操作的完整代码    认识堆    堆其实是一棵完全二叉树,完全二叉树是一种特殊的二叉树,除了最后一层外,每一层都被完全填满,最后一层从左到右填充。    对于完全二叉树(根节点下标为0)中任意一个下标为i的结点,它的左孩子结点下标为2i+1,右孩子结点下标为2i+2,父节点下标为(i-

【数据结构】5.大根堆和左高树

1.大根堆1.1定义  大根树:树中的每一个节点的值都大于或等于其子节点的值  大根堆:既是大根树又是完全二叉树(增加了完全二叉树的限制条件)所以下图中只有(a)和(c)是大根堆 1.2大根堆的插入(数组实现)  假设在下面大根堆中插入一个元素9,插入步骤如下,时间复杂度为O(height)=O(logn)尝试插入在6号位置,如果新的元素小于3号位置,则插入;否则把3号位置的元素向下移动到6号位置尝试插入在3号位置,如果新的元素小于1号元素,则插入;否则把1号位置的元素向下移动到3号位置,循环终止//为theElement寻找插入位置,currentNode从新叶子节点开始向上移动intcur

堆排序(大根堆与小根堆)

(1)是什么?是一种适用于关键字较多的情况下的排序算法,例如在十亿个数中选出前1000个最大值或者最小值如果在传统的排序算法中(例如冒泡,插入等),我们习惯把目标数据整体进行一次排序,再截取出前1000个最小的或者最大的。但是我们可以设想一下,从一开始我们目标就只要1000个,那么其实其余九亿九千九百九十九万九千个数据,我们压根不需要知道它们的排序顺序,只需要知道它们都比我们1000个目标数据中最大值都要大就可以了这就是堆排序。它的思想整体上非常清晰简单,结构上是一个完全二叉树。根结点比左右孩子都大则叫做大根堆。其中,左右孩子的根结点,又会比它们的左右孩子都大。根结点比左右孩子都小则叫做小根堆