其他分享
首页 > 其他分享> > 堆排序

堆排序

作者:互联网

堆的结构可以分为大根堆和小根堆,是一个完全二叉树,而堆排序是根据堆的这种数据结构设计的一种排序。

大根堆:每个结点的值都大于其左孩子和右孩子结点的值。

小根堆:每个结点的值都小于其左孩子和右孩子结点的值。

堆可以采用数组存储,结点的标号从 $0$ 开始,则对任一个结点 $i$,其左孩子的结点标号为 $2i+1$,右孩子的结点标号为 $2i+2$。

下面以大根堆为例,介绍堆排序的基本步骤。

    1)首先将待排序的数组构造成一个大根堆,此时,整个数组的最大值就是堆结构的顶端。

    2)将顶端的数与末尾的数交换,此时,末尾的数为最大值,剩余待排序数组个数为 $n-1$。

    3)将剩余的 $n-1$ 个数再构造成大根堆,再将顶端数与 $n-1$ 位置的数交换,如此反复执行,便能得到有序数组(一开始就是数组存储的)。

可以发现:这个算法最重要的操作就是将树调整为大根堆

 

 

 

未完待续。。。。。。

标签:标号,大根堆,结点,堆排序,根堆,数组
来源: https://www.cnblogs.com/yanghh/p/13698675.html