简介
- 堆是完全二叉树(对应满二叉树,每个节点的序号一一对应)
- 每个结点都大于或者等于左右子结点的值称为大顶堆
- 每个结点都小于或者等于左右子节点的值称为小顶堆
堆排序是不稳定排序
稳定性问题以后讨论
排序思想(大顶堆),小顶堆类似
- 首先通过要排序数组构造大顶堆(这一步可以将数组的最大值放在数组的首位)
- 交换数组的
首尾
元素 - 数组的
长度减一
继续构造大顶堆,重复2 - 得到由
小到大
排序的数组(大顶堆)
代码分析
构造大顶堆:
start = (arr.length - 2) / 2; 找到第一个非叶子节点(start 在这里表示的都是非叶子节点)
public static void Sort(int[] arr) {
int length = arr.length;
int start = (arr.length - 2) / 2; //从第一个非叶子节点,由下至上
for (; start >= 0; start--) {