【问题标题】:Sort array (Time complexity )排序数组(时间复杂度)
【发布时间】:2013-02-02 00:22:44
【问题描述】:

如果我有一个数组,其中单元格 0-N 已排序,单元格 N+1 直到 M+N,则未排序。 对数组进行排序的最佳时间复杂度是多少?

谢谢!


编辑:

谢谢!!如果我想就地这样做,它会改变复杂性吗?

【问题讨论】:

  • O((m+n) log (m+n))。如果您使用标准库函数,则此界限是精确的,无论如何您都不会变得更好。

标签: arrays sorting big-o time-complexity


【解决方案1】:

首先,只对 M 个未排序的元素进行排序。这需要时间 O(M log M) 使用基于比较的排序(如快速排序、合并排序或堆排序)。

然后将两个已排序的段(长度为 N 和 M)合并在一起。这需要时间 O(M + N)。

因此,使用基于比较的排序,最佳时间复杂度是 O(M + N + M log M)。

【讨论】:

  • M 是未排序部分的大小
  • 是的,我意识到我误读了问题并修复了我的解决方案。
  • 注意O(M + M log M)=O(M log M),意思是可以简化复杂度表达式。
  • 谢谢!!如果我想就地做这件事,它会改变复杂性吗?
  • 如果您可以在线性时间和恒定的附加空间中合并两个排序数组,您将不会改变复杂性。 This paper 声称描述了这样一个算法,但我只阅读了摘要。
猜你喜欢
  • 1970-01-01
  • 2020-10-27
  • 1970-01-01
  • 2013-03-14
  • 2021-02-11
  • 2021-03-05
  • 1970-01-01
  • 2022-11-23
  • 2013-07-15
相关资源
最近更新 更多