堆是一个完全二叉树 用数组表示 a[1]表示堆顶数据 i是非叶子节点, 左节点是i*2 右节点是i*2+1
堆化函数(主要目的是保证某个非叶子节点以下的所有子节点都满足堆结构定义)
private static void heapify(int[] a, int n, int i) { //i表示节点序号(非叶子节点)
while (true) {
int maxPos = i;
if (i*2 <= n && a[i] < a[i*2]) maxPos = i*2;
if (i*2+1 <= n && a[maxPos] < a[i*2+1]) maxPos = i*2+1;
if (maxPos == i) break;
swap(a, i, maxPos);
i = maxPos;
}
}
插入
删除
堆排序 1建堆 2排序