使用链表和数组进行堆排序实现

时间:2013-01-29 13:31:51

标签: algorithm sorting heap

可以使用链表和数组实现堆排序。

使用链表或数组的理想方法是什么?

使用数组和链表建立堆的时间复杂度是多少?两者都是O(nlogn)吗?

删除的时间复杂度是多少?

3 个答案:

答案 0 :(得分:2)

对于数组,它是O(nlogn)。 becoz你可以在索引i轻松获取元素。这个特性使得获取每个节点的父节点和左/右子节点变得容易。删除的时间复杂度为O(lgn)。

对于链表,我认为这是一个不同的故事。这取决于你如何定义“下一个”节点。据我所知,它比使用数组更复杂。

答案 1 :(得分:2)

Binary Heap

时间复杂度 在大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,然后按照几个链接列表版本的链接进行操作。