maxheapify的复杂度是o(lgn),而建立最大堆的复杂度是o(n),那么是不是堆排序算法的复杂度就是二者相乘呢?当然不是,怎么可能这么简单
首先,在建立一次最大堆,消耗n的时间,继续执行,每次将最大的数(根节点)选出来,然后maxheapify,直到将整个数组的元素历遍完毕。好了,回顾一遍堆排序算法后,开始正式推导。
首先,设堆的大小为n,堆的高度为lgn,设当前元素所在的高度为h
则每一次maxheapify的时间复杂度为0(lgn-h), 前提是maxheapify的复杂度为lgn
Buildheap 的复杂度为o(n)
平均每一层中应该有 个元素,所以,对排阻算法的时间复杂度应该为: 0(lgn-h)=o( (lgn-h))=o(nlgn)