可以使用链表和数组实现堆排序。
使用链表或数组的理想方法是什么?
使用数组和链表建立堆的时间复杂度是多少?两者都是O(nlogn)吗?
删除的时间复杂度是多少?
答案 0 :(得分:2)
对于数组,它是O(nlogn)。 becoz你可以在索引i轻松获取元素。这个特性使得获取每个节点的父节点和左/右子节点变得容易。删除的时间复杂度为O(lgn)。
对于链表,我认为这是一个不同的故事。这取决于你如何定义“下一个”节点。据我所知,它比使用数组更复杂。
答案 1 :(得分:2)
时间复杂度 在大O符号
Average Worst case
Space O(n) O(n)
Search N/A Operation N/A Operation
Insert O(log n) O(log n)
Delete O(log n) O(log n)
因此,时间复杂度无论是否使用链表数组都是一样的。
答案 2 :(得分:0)
假设正确实现,使用链表或数组的时间复杂度是相同的。
我的博客上有几种堆排序实现。对于传统的基于阵列的版本,请启动here,然后按照几个链接列表版本的链接进行操作。