1.建堆
最优的方法:时间复杂度为O(n)
方法1.插入一个元素,然后堆化一次,时间复杂度为n*堆化的时间复杂度即:nlog(n)
方法2.先把所有元素按输入顺序放入数组中,然后从下往上调整(堆化),最终建堆的时间复杂度为O(n)<br>(分析过程含有数学推导)
疑问:建堆的时间复杂为O(n),堆化的时间复杂度为log(n),为什么建堆的时间复杂度不是log(n)呢?
是不是可以这样理解:<br>最优化的建堆分为两步:第一步顺序插入n个元素,时间复杂度为O(n),<br>第二步,堆化,堆化的时间复杂度为O(logn),两者相加所以最终的<br>时间复杂度为:O(n)? 可能这样的理解是错的
2.排序
排序过程的时间复杂度为nlog(n)
分析:排序过程就是每次从大小为n的堆中拿到堆顶元素,<br>然后将剩余的n-1个元素进行堆化的过程,n个元素,每次堆化<br>log(n)所以总的时间复杂度为nlog(n)