堆排序:
给定一个int数组A以及大小n,请返回排序后的数组;
核心思想:
1、将数组调整为大堆项。
1.1、构造大堆项,需要从第i=n/2(也就是数组的一半)元素到第一个元素依次调整,倒着;
(为啥要从n/2开始呢?因为对于二叉树,当前索引的2倍是该索引的左子树索引,2倍+1是右子树索引)
1.2、然后分别与A[i]的左右子树比大小,谁大,就把它的值放到A[i]上进行对调;
1.3、依次向上走,直到i=0;这样A[0]就是最大值。
2、将大堆项的堆顶元素与最后位置对调,每次一个元素到达最终位置n,对前n-1个继续。
3、递归调用,共重复n-1次。