/**
*实现堆排序[原地堆排序]
*堆适用于动态数据的维护,不适合系统级的排序
*时间复杂度O(nlogn),从小到大排序,前两种堆排序均开辟了额外空间
*不需开辟额外空间,也不需为额外空间进行处理,所以,空间复杂度为O(1)
*根节点从0开始,左孩子:2i+1,右孩子2i+2;
*/
public class HeapSort3 {
public void heapSort3(int[]arr,int n) {
//i=(n-2)/2为第一个不是叶子的节点
//此时即为一个最大堆,arr[0]最大
for(int i=(n-2)/2;i>=