堆排序

66 阅读1分钟

那么,什么是堆呢?

这里,必须引入一个完全二叉树的概念,然后过渡到堆的概念。

image.png

上图,就是一个完全二叉树,其特点在于:

从作为第一层的根开始,除了最后一层之外,第N层的元素个数都必须是2的N次方;

第一层2个元素,第二层4个,第三层8个,以此类推。而最后一行的元素,都要紧贴在左边。

总结:第一层的根开始,除了最后一层之外,第N层的元素个数都必须是2的N次方,每一行的元素都从最左边开始安放,两个元素之间不能有空闲,具备了这两个特点的树,就是一棵完全二叉树。

那么,完全二叉树与堆有什么关系呢?

首先堆必须完全满足上述数据结构,作为完全二叉树的基础上,其次对于任意一个拥有父节点的子节点,其数值均不小于/大于父节点的值称为堆。

image.png

如图,堆分为大根堆和小根堆 大根堆:一棵完全二叉树,对于任意一个子节点来说,均不大于其父节点的值,如此递推,就是根节点的值是最大的,这样的数,称为大根堆。 小根堆:反之小根堆。

明确下大根堆,小根堆的概念,继续说堆排序。

image.png

父子节点关系

父:n。

左子:2n+1。

右子:2n+2。

代码 code.juejin.cn/pen/7444464…