【问题标题】:Time complexity of iterative quick sort迭代快速排序的时间复杂度
【发布时间】:2020-08-08 20:31:13
【问题描述】:

我已经了解了递归快速排序,最好的情况需要 O(nlogn),最坏的情况需要 O(n^2)。 但我试图找到迭代快速排序的时间复杂度。我知道最好的情况是 O(nlogn) 和 O(n^2)。但我不是为了最好的情况来证明它的合理性。我正在关注本教程

https://www.techiedelight.com/iterative-implementation-of-quicksort/

假设我们有 15 个元素,因此枢轴索引位置将始终位于中间,使其成为理想的最佳情况。但我发现它的条件是“while (!stack.empty())”,即分区数将发生 6 次,不接近 log(n)。如何证明迭代快速排序中最佳情况的时间复杂度是 O(nlogn)。

【问题讨论】:

  • 迭代版本使用本地堆栈而不是处理器堆栈。时间和空间复杂度会根据实际实现是一样的。

标签: data-structures time-complexity big-o complexity-theory quicksort


【解决方案1】:

在第一个分区过程中,您拆分为两个分区。这需要 O(n)。在下一轮中,您有两个分区,每个分区的大小为 n/2。对其中的每一个进行分区需要 O(n/2)。第二遍的总时间为 O(n/2 + n/2): O(n)。每个通道都有更多的分区,但分区更小。总共需要进行 log(n) 次,每次都需要 O(n) 总时间。

它的工作方式与递归版本完全相同。唯一的区别是,在迭代版本中,您是显式管理堆栈,而不是依赖于递归版本中的隐式堆栈。

【讨论】:

  • 根据您对堆栈的评论,这是否意味着迭代和递归的递归方程相同?
猜你喜欢
  • 2012-07-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-12
  • 2020-10-22
  • 2013-04-26
  • 1970-01-01
相关资源
最近更新 更多