代码之家  ›  专栏  ›  技术社区  ›  user2798432

我们能用heapsort在线性时间内对一组无序的数字进行排序吗?

  •  2
  • user2798432  · 技术社区  · 12 年前

    嘿,伙计们,快提问。。

    正如我们所知,我们可以在线性时间内从一组无序的数字中构建一个堆。有人能证明是怎么做到的吗?

    提前感谢!

    1 回复  |  直到 12 年前
        1
  •  2
  •   Drew Hall    12 年前

    尽管您可以在线性(O(n))时间内构建一个堆(可能实现为一个完整的二叉树),但每次从堆中提取都需要O(log(n)时间,以保持堆不变。因此,从二进制堆组装排序后的数组总共需要O(n-log(n))时间,就像所有基于二进制比较的最优排序算法一样。