堆排序是一种利用堆这种数据结构设计的排序算法,堆本质上是二叉树结构,但是这里又多了个条件:根结点大于等于左右结点;
其实,堆排序本质上和冒泡排序有异曲同工之处,整个排序过程分以下几步:
1. 这里有一组顺序混乱的数组:
2. 首先,将这个数组排成一个二叉树结构:
3. 从右到左,从下到上,从二叉树的最后一个结点开始按照规则(根结点大于等于子结点)整理结点:
4. 最终,当所有结点都被遍历之后我们便得到一个是大值的顶结点(这里是 96):
5. 此时,将顶结点与最末端的子结点互换位置,并将其从排序队列中退出,此时顶结点不再满足规则,需要重新排序:
6. 以此类推,哪个结点发生变动,就将哪个结点重新排序,直到所有结点都满足规则,这样每次都可以得到一个当前队列中最大的值;
7. 按照以上操作,直到队列中只剩下最后一个结点,排序结束;