题意:
——给出n个数,从小到大排序。
前提知识:
——了解什么是树,什么是二叉树,什么是完全二叉树,以及特点
最小堆:
堆顶是最小值,一般放于数组的第一个位置,但是构建完最小堆后不能保证数据一定是按从小到大放置。
最小堆定义:在一棵完全二叉树中,所有的父结点都比子结点要小。
这里未强调左右子结点谁大谁小,请看第二个图(最小堆)便可明白。
堆排序思想:
以该数据为例:构建最小堆
14
99 5 36 7 22 17 46 12 2 19 25 28 1 92
构建一个完全二叉树
显而易见,此刻堆顶并不是最小值,
下面就是想办法如何把最小值上升到堆顶,同时保证所有的父结点都比子结点要小。
注意这一知识:
——一棵大树可看作由许多的小树构成。
因此,
先从最小的小树开始,即首先从叶结点开始。
但是叶结点没有儿子,所以以叶结点为跟结点的子树都符合最小堆特性,即父结点比子节点的值小。
所以从最后一个非叶结点开始构建最小堆,
即把7号结点为根结点的小树构建成最小堆;
构建完成后再一个接一个继续构建,即按6,5,4&#