迭代快速排序的时间复杂度

时间:2020-04-25 07:34:43

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

我已经了解了递归快速排序,最理想的情况是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)是如何证明迭代快速排序中最佳情况的时间复杂性的??

1 个答案:

答案 0 :(得分:0)

在第一遍分区中,您分为两个分区。这需要O(n)。在下一遍中,您将拥有两个分区,每个分区的大小为n / 2。需要O(n / 2)对每个分区进行分区。第二遍的总时间为O(n / 2 + n / 2):O(n)。每遍都具有更多分区,但是分区较小。总共,您进行log(n)次传递,每个传递都需要O(n)总时间。

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