用VBA实现对一维数组的排序(7)堆排序
想要学习堆排序,就先的了解一点二叉树和堆的基础,这里我们不讲概念,直接上图先看看堆和二叉树的样子,认识一下这俩结构.
通过图,我们一目了然,
这就是一个典型的二叉树结构,
上图左边是一格最小的二叉树结构,是完全二叉树一个顶点连接两个点或一个左边的点,顶点称为父节点,下面的称为子节点子节点必须先有左边才有右边或者只有左边,如此才成为完全二叉树,,否则就是非完全二叉树,在堆排序中,我们不能出现非完全二叉树
那什么是堆呢?
当一个完全二叉树的父节点大于(大根堆)或小于(小根堆)该最小完全二叉树的所有子节点的时候,我们将其称为堆,堆,从宏观来看,顶端永远是最值,如果每次我们都将这个最值拿出来,再将剩下的数据调成堆,就又能找到剩余数据中的最值,这个动作是不是有点熟悉?没错这组动作恰好就是排序.我们看图,看图比文字更为直观,能更快的理解
第一步,将数据摆成一个二叉树,实际上二叉树和堆是不存在的,是人为的赋予的一种关系,
第二步,将二叉树转换为堆
共有 0 条评论