【问题标题】:Heap Sort a Linked List对链表进行堆排序
【发布时间】:2011-12-26 18:22:50
【问题描述】:

我正在尝试在 C++ 中创建一个排序函数,该函数使用堆排序对链表对象进行排序,但我不知道如何开始。任何人都可以告诉我如何做到这一点吗?我什至不确定如何对链接列表进行排序

【问题讨论】:

    标签: list sorting linked-list heap


    【解决方案1】:

    Heapsort 通过从数据中构建 heap 来工作。只有在每个元素都有random-access 时,堆才能有效地构建。

    第一步将创建一个指向列表对象的指针数组,以便您可以对数组执行通常的堆排序。

    最后一步是将指针数组转换回链表。

    一个更好的链表排序方法是insertion sort——尤其是因为您可以将排序作为链表实现的insert()函数的一部分来执行。

    【讨论】:

      【解决方案2】:

      我必须同意 sarnolds 的回答。由于多种原因,堆集链表效率极低,但首先是它们应该在初始放置时进行排序。也就是说,如果我要尝试,我会创建一个ArrayList<T> links 将所有链接加载到其中。然后,您可以将其成堆抓取并对其进行排序。完成后,只需从头开始重新加载链接列表。

      【讨论】:

        【解决方案3】:

        HeapSort 之所以好的有两个原因 -
        1- 这是一种就地算法。
        2- O(nlogn) 的时间复杂度

        O(nlogn) 是因为数组的随机访问性质,但是如果你使用链表,那么你就不会获得数组的随机访问优势。 因此时间复杂度将变为 O(n^2)。这不利于排序。

        我会推荐你​​对链表使用归并排序算法。

        【讨论】:

          猜你喜欢
          • 2012-06-08
          • 2010-10-20
          • 2018-07-10
          • 1970-01-01
          • 2013-12-18
          • 2010-09-14
          • 2017-03-22
          相关资源
          最近更新 更多