quicksort - 所有重复项的数组如何进行快速排序 O(N^2)?
问题描述
在我的数据结构和算法课上,我们学习了 3-scan 和 Hoare 的分区算法。有人告诉我,我们在所有重复项的数组上得到了 O(N^2) 的最坏情况。
但是,我不明白为什么所有重复的数组会给出 N^2 的最坏情况时间,我理解为什么选择 min/max 作为枢轴会给出最坏的情况,但希望有人可以解释重复的情况!
解决方案
只有 Lomuto 分区或类似的分区方案存在所有重复导致 O(n^2) 时间复杂度的问题。
https://en.wikipedia.org/wiki/Quicksort#Lomuto_partition_scheme
使用 Hoare 分区方案,将有不必要的相等元素交换,但分区将是理想的 50% / 50% 分割,所以 O(log2(n)) (常数 2 通常不包括时间复杂度,但我'我在此处包括它以指示分区的理想拆分)。一般来说,随着重复百分比的增加,基于 Hoare 分区的快速排序所需的时间会减少。
https://en.wikipedia.org/wiki/Quicksort#Hoare_partition_scheme
推荐阅读
- linux - 如何将 fzf 绑定到 zsh 密钥?
- amazon-web-services - 任何 AWS 服务来存储 lambda 或 ec2 主机使用的配置?
- python - Django restful create api 将新条目标记为在创建时编辑
- css - 使用uikit在手风琴中的垂直虚线
- javascript - Javascript 函数不执行
- c# - 如何在不复制现有代码的情况下将现有 DNN 模块导入新模块?
- angular - 错误 TS1005:';' 预期的。TypeScript Angular 6 For First Build error rxjs inside node_modules
- javascript - 如何将 Tensorflow JS 与 Minima / 其他 Jekyll 主题一起使用?
- php - 在codeigniter中隐藏pdf(mpdf或fpdi)的下载和打印选项
- c# - 为什么 Get-ChildItem 命令不从 C# 程序读取 C 驱动器?