删除中间的是 要比较一下是大根堆还是小根堆 上下调整
值不能重复 index来找
堆的结构基本上固定 不用建立一个带指针的二叉树结点
1
2 3
4 5 6 7
垃圾 图片上传失败 3/2 =1父节点 32=6子节点 32+1 右子节点
package basic_class_01;
import java.util.Arrays;
public class Code_03_HeapSort {
public static void heapSort(int[] arr) {
if (arr == null || arr.length < 2) {
return;
}
for (int i = 0; i < arr.length; i++) {
heapInsert(arr, i);
}
int size = arr.length;
swap(arr, 0, --size);
while (size > 0) {
heapify(arr, 0, size);
swap(arr, 0, --size);
}
}
//构造大根堆(通过新插入的数上升)
public static void heapInsert(int[] arr, int index) {
while (arr[index] > arr[(index - 1) / 2]) {
swap(arr, index, (index - 1) / 2