小顶堆
每个左右子树比父节点大
小的在上,大的在下
大顶堆
大的在上,小的在下
思想
堆排序不会真正的建立树,只是利用它的思想
运用到完全二叉树,按照顺序 给完全二叉树每个节点一个下标
1.先构建大顶堆:
- 定义指针 i 从最后一个节点开始找起,找到第一个有子节点的
- 定义指针 c 指向子节点当中最大的数
- 如果 c>i 两指针互换:让父亲比儿子大,i 是父亲, c 是儿子
package study;
public class quickSort {
public static void main(String[] args) {
int[]arr=new int[]{2,3,7,8,6,4,1};
for (int i = (arr.length - 1) / 2; i >= 0; i--) {
adjustHeap(arr, i, arr.length);
}
for (int i = arr.length - 1; i > 0; i--) {
int temp = arr[i];
arr[i] = arr[0];
arr[0] = temp;
adjustHeap(arr, 0, i);
}
}
private static void adjustHeap (int[]arr,int parent,int length){
int temp = arr[parent];
int IChild = 2*parent + 1;
while(IChild < length){
int rChild = 2 * parent +1;
if(rChild < length && arr[IChild] < arr[rChild]){
IChild ++;
}
if(temp >= arr[IChild]){
break;
}
arr[parent] = arr[IChild];
parent = IChild;
IChild = 2*IChild + 1;
}
arr[parent] = temp;
}
}