堆排序
作者:互联网
堆的结构可以分为大根堆和小根堆,是一个完全二叉树,而堆排序是根据堆的这种数据结构设计的一种排序。
大根堆:每个结点的值都大于其左孩子和右孩子结点的值。
小根堆:每个结点的值都小于其左孩子和右孩子结点的值。
堆可以采用数组存储,结点的标号从 $0$ 开始,则对任一个结点 $i$,其左孩子的结点标号为 $2i+1$,右孩子的结点标号为 $2i+2$。
下面以大根堆为例,介绍堆排序的基本步骤。
1)首先将待排序的数组构造成一个大根堆,此时,整个数组的最大值就是堆结构的顶端。
2)将顶端的数与末尾的数交换,此时,末尾的数为最大值,剩余待排序数组个数为 $n-1$。
3)将剩余的 $n-1$ 个数再构造成大根堆,再将顶端数与 $n-1$ 位置的数交换,如此反复执行,便能得到有序数组(一开始就是数组存储的)。
可以发现:这个算法最重要的操作就是将树调整为大根堆。
未完待续。。。。。。
标签:标号,大根堆,结点,堆排序,根堆,数组 来源: https://www.cnblogs.com/yanghh/p/13698675.html