顾名思义,堆排序就是利用堆的性质进行的选择排序
堆
堆是一棵顺序存储的完全二叉树
其中每个根结点的关键字都不大于其孩子结点的关键字,这样的堆称为小根堆。
其中每个根结点的关键字都不小于其孩子结点的关键字,这样的堆称为大根堆。
完全二叉树性质
设当前元素为数组的第i个元素,那么,
(1) 它的左孩子结点是:2i + 1;
(2) 它的右孩子结点是:2i + 2;
(3) 它的父结点是:(i-1) / 2;
(4)从下往上第一个非叶子节点:(length / 2) - 1;
算法思路
- 构造初始堆(从由下至上第一个非叶子节点开始);
- 交换首尾元素;
- 数组长度减一,把剩下的元素重新调整为大根堆;
- 重复2、3直至剩下最后一个元素结束。
网友评论