data-structures - 迭代快速排序的时间复杂度
问题描述
我已经了解了递归快速排序,最好的情况需要 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)。?
解决方案
在第一个分区过程中,您拆分为两个分区。这需要 O(n)。在下一轮中,您有两个分区,每个分区的大小为 n/2。对其中的每一个进行分区需要 O(n/2)。第二遍的总时间为 O(n/2 + n/2): O(n)。每个通道都有更多的分区,但分区更小。总的来说,你进行了 log(n) 次传递,每一次都需要 O(n) 总时间。
它的工作方式与递归版本完全相同。唯一的区别是,在迭代版本中,您显式地管理堆栈,而不是依赖于递归版本中的隐式堆栈。
推荐阅读
- python - 熊猫使用多索引加入索引而不合并
- azure-functions - Azure Function 停止后仍连接到 EventHub
- javascript - 在javascript中使用Array.sort()时,以下情况有什么区别?
- html - 无论我做什么,都无法在我的导航栏上正确放置一个列表项
- javascript - 对 AWS Web 应用程序进行压力测试
- php - 如何在 Laravel 的 REST API 中使用或创建分页?
- javascript - 将 setSinkId 与 stereoPanner 结合使用?
- nsis - 无法在 NSIS 卸载程序中隐藏后退按钮
- sas - SAS EG - 检查是否可以锁定,否则使用其他表
- postgresql - pgadmin 自动显示千位分隔符