算法导论中的堆排序算法时间复杂度推导

来源:互联网 发布:centos cp 拷贝文件夹 编辑:程序博客网 时间:2024/05/22 15:47

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)

原创粉丝点击