堆排序是一种原地(in place)排序算法,二叉堆有两种:最大堆和最小堆
Max_Heapify过程:保持最大堆性质的关键,父结点大于等于子节点, 运行时间: O(lgN)
Bulid_Max_Heap过程:遍历整个数组,调用Max_Heapify过程,保持所有元素的最大堆性质,构建最大堆,运行时间:O(n)
Heap_Sort过程:遍历整个数组,交换首位元素,并提取首元素,调用Max_Heapify过程,保持所有元素的最大堆性质,对数组进行原地排序,运行时间:O(nlgn)
Heap-Sort的C++实现如下: