主要是理解思路,思路有了代码则是水到渠成。

堆排序实际是数组排序,使用数组的下标构造成一个二叉树,想法很有意思。

加入有数组a,那可以把a[0]视为根节点,它的子节点为a[2*0+1],a[2*0+2],即对于任何一个节点a[i],则有子节点a[2*i+1]和a[2*i+2]。

1. 构建一个大顶堆,构建成功后a[0]便是最大的。

2. 之后交换a[0]和a[len(a)-1]

3. 然后在调整a[:len(a)-2](把a[len(a)-1]排除在外)为大顶堆

4. 重复上面的步骤

5. 得到有序数组