首先在了解堆排序之前我们先来回顾一下什么叫做堆吧!
基本概念
-
堆(Heap):是一种特殊的完全二叉树,其中每个节点的值都大于或等于(大顶堆)或小于或等于(小顶堆)其子节点的值。堆常通过数组来表示,方便快速访问和调整结构。
-
大顶堆:堆顶元素(树的根节点)是最大值,适合做降序排序的基础。
-
小顶堆:堆顶元素是最小值,适合做升序排序的基础。
让我们简单的来回顾一下大根堆是如何创建的吧!
这里让我再来为大家解释一下:首先parent指向的是最后一个父亲节点的位置,然后child默认是左孩子树,但是在比较的过程中child会指向左孩子树或者是右孩子树的最大值,然后再与parent下标的值进行比较,这里因为创建的是大根堆,所以,child下标的位置比parent下标的位置大的话那么就需要交换。
那么创建大根堆的代码我就放在下面了
public static int[] createBigHeap(int[] array){
for (int parent = (array.length-1-1)/2; parent>=0; parent--) {
shifDown(array,parent,array.length);
}
return array;
}
private static void shifDown(int[] array,int parent,int end){
int child = parent*2+1;
while(child<end){