算法-11-堆排序
目录 1、二叉堆 2、堆排序 3、代码 4、应用场景 1、二叉堆 二叉堆是一种特殊的堆,二叉堆是完全二元树(二叉树)或者是近似完全二元树(二叉树)。二叉堆有两种: 最大堆 和 最小堆 。最大堆: 父结点 的键值总是大于或等于任何一个子 节点 的键值 ;最小堆:父结点的键值总是小于或等于任何一个子节点的键值。 二叉堆一般用 数组 来表示 。如果根节点在数组中的位置是1,第 n 个位置的子节点分别在2 n 和 2 n +1。因此,第1个位置的子节点在2和3,第2个位置的子节点在4和5。以此类推。这种基于1的数组存储方式便于寻找父节点和子节点。 下图中a[1]的子结点就是a[2]和a[3]. 2、堆排序 堆排序就是利用了二叉堆中的 最大堆 。即每个父结点(数组中下标k),都要大于等于它的子结点(数组中下标2k和2k+1)。 堆排序的步骤:1、对于一个无序数组a,先将它构建成 最大堆。 这时候二叉堆的 根节点 就是数组中 最大的那个元素 。 2、然后我们把最大的根节点拿出来放在该数组中末尾。 3、将剩下的元素再构建成 最大堆 ,得到第二大元素,放在第一大元素的前面。 4、不断循环。。。。。。。。。。。。。。。。类似冒泡排序的思想,每次先把最大的元素拿出来放在末尾。 3、代码 public class Heap { public static void sort(double[] a){ /