如果该完全二叉树中所有的父亲结点的值均小于等于其孩子结点,则称其为小堆或小根堆。
注意:
堆只有大堆和小堆。...堆的性质
堆中某个节点的值总是不大于或不小于其父节点的值;
堆总是一棵完全二叉树。
堆的逻辑结构是一棵完全二叉树,但是其物理结构,即实际的存储结构是一个一维数组。...因为我们要删除的就是堆顶的元素,把它交换到数组的最后一个位置,数组头删不方便,尾删是不是很easy啊,直接size- -就把最大值删除了。
那删除之后是不是就完事了?...向下调整建堆
但是上面那种方式去建堆其实不是特别好(时间复杂度是N*log2N,我们后面会证明) ,有些地方会让我们这样去建立一个堆:
就是给我们一个数组,数组的元素可能是任意值,我们需要将这个数组进行一些处理使它变成一个堆...};
堆排序呢,我们只需给数组和元素个数就行了:
int arr[] = { 27,15,19,18,28,34,65,49,25,37 };
HeapSort(arr, sizeof(arr