堆
分为大顶堆和小顶堆,下面以小顶堆为例介绍堆排序
分两步
第一步:建堆
第二步:堆排序(抛出堆顶)
第一步:是一个反复筛选的过程,最后一个非终端节点是第k=n/2(向下取整)个节点,所以只需要从第k个节点作为根节点倒着往前遍历,每次比较3个值,把最小的放在小三角形的顶部,直到遍历到堆顶,结束建堆过程
第二步:堆排序:堆顶元素一定是最小值,这样,每次抛出堆顶后,将堆中最后一个元素放到堆顶,因为这样做可以保证根节点的左右子树仍为堆,仅需要自上而下进行调整,将现在堆顶元素与左右儿子比较,将堆顶和左右儿子中较小得一个交换位置,这样左右子树一定有一个堆被破坏,只需要再进行上述调整
end