1. 堆排序
堆排序的定义及思想可以参考百度百科:堆排序
用一句概括,堆排序就是一种改进的选择排序,改进的地方在于,每次做选择的时候,不单单把最大的数字选择出来,而且把排序过程中的一些操作进行了记录,这样在后续排序中可以利用,并且有分组的思想在里面,从而提高了排序效率,其效率为O(n*logn).
2. 源代码
堆排序中有两个核心的操作,一个是创建大顶堆(或者小顶堆,这里用的是大顶堆),再一个就是对堆进行调整。这里需要注意的是,并没有真正的创建堆,只是利用完全二叉树的特性,将其对应到数组的下标中(例如对于节点i,如果其存在左孩子和右孩子,那么他们的下标一定是2*i, 和2*i+1)其中创建的时候是从下向上创建,而调整则是从上向下调整。
这里为了方便,堆从a[1]位置开始。
代码运行结果如下:
源代码如下ÿ