分为大顶堆和小顶堆,下面以小顶堆为例介绍堆排序

分两步

第一步:建堆

第二步:堆排序(抛出堆顶)

第一步:是一个反复筛选的过程,最后一个非终端节点是第k=n/2(向下取整)个节点,所以只需要从第k个节点作为根节点倒着往前遍历,每次比较3个值,把最小的放在小三角形的顶部,直到遍历到堆顶,结束建堆过程

第二步:堆排序:堆顶元素一定是最小值,这样,每次抛出堆顶后,将堆中最后一个元素放到堆顶,因为这样做可以保证根节点的左右子树仍为堆,仅需要自上而下进行调整,将现在堆顶元素与左右儿子比较,将堆顶和左右儿子中较小得一个交换位置,这样左右子树一定有一个堆被破坏,只需要再进行上述调整

end

posted @ 2016-04-26 10:48  zach96  阅读(119)  评论(0编辑  收藏  举报