《C语言杂俎》|证明堆排序的时间复杂度


建堆的时间复杂度 因为堆是完全二叉树,而满二叉树也是完全二叉树。此处为了简化,将采用满二叉树来证明。(时间复杂度本来看的就是近似值,所以多几个节点不会影响最终结果):
假设树的高度为 《C语言杂俎》|证明堆排序的时间复杂度
文章图片

《C语言杂俎》|证明堆排序的时间复杂度
文章图片

《C语言杂俎》|证明堆排序的时间复杂度
文章图片
层:《C语言杂俎》|证明堆排序的时间复杂度
文章图片
个节点,需要向下移动 《C语言杂俎》|证明堆排序的时间复杂度
文章图片

《C语言杂俎》|证明堆排序的时间复杂度
文章图片
层:《C语言杂俎》|证明堆排序的时间复杂度
文章图片
个节点,需要向下移动 《C语言杂俎》|证明堆排序的时间复杂度
文章图片

《C语言杂俎》|证明堆排序的时间复杂度
文章图片
层:《C语言杂俎》|证明堆排序的时间复杂度
文章图片
个节点,需要向下移动 《C语言杂俎》|证明堆排序的时间复杂度
文章图片

《C语言杂俎》|证明堆排序的时间复杂度
文章图片
层:《C语言杂俎》|证明堆排序的时间复杂度
文章图片
个节点,需要向下移动 《C语言杂俎》|证明堆排序的时间复杂度
文章图片

……
《C语言杂俎》|证明堆排序的时间复杂度
文章图片
层:《C语言杂俎》|证明堆排序的时间复杂度
文章图片
个节点,需要向下移动 《C语言杂俎》|证明堆排序的时间复杂度
文章图片

则需要移动节点总的移动步数为:
《C语言杂俎》|证明堆排序的时间复杂度
文章图片

《C语言杂俎》|证明堆排序的时间复杂度
文章图片

② - ① 错位相减:
《C语言杂俎》|证明堆排序的时间复杂度
文章图片

《C语言杂俎》|证明堆排序的时间复杂度
文章图片

《C语言杂俎》|证明堆排序的时间复杂度
文章图片

《C语言杂俎》|证明堆排序的时间复杂度
文章图片

《C语言杂俎》|证明堆排序的时间复杂度
文章图片


因此,建堆的时间复杂度为 《C语言杂俎》|证明堆排序的时间复杂度
文章图片




【《C语言杂俎》|证明堆排序的时间复杂度】

    推荐阅读