双枢轴快速排序和快速排序有什么区别?

2024-06-20

我以前从未见过双枢轴快速排序。 是快速排序的升级版吗?
双枢轴快速排序和快速排序有什么区别?


我在 Java 文档中找到了这个。

排序算法是双枢轴快速排序 作者:弗拉基米尔·雅罗斯拉夫斯基、乔恩·本特利和约书亚·布洛赫。这个算法 在许多数据集上提供 O(n log(n)) 性能,这会导致其他问题 快速排序会降低二次性能,并且通常是 比传统(单枢轴)快速排序实现更快。

然后我在谷歌搜索结果中找到了这个。 快速排序算法原理:

  1. 从数组中选取一个元素,称为主元。
  2. 重新排序数组,使所有小于基准的元素都位于基准之前 枢轴和所有大于枢轴的元素都位于它之后(相同的值可以 无论哪种方式)。划分之后,枢轴元素就处于其最终位置。
  3. 对较小元素的子数组和较大元素的子数组进行递归排序。

相比之下,双枢轴快速排序:

  1. 对于小数组(长度
  2. 选择两个主元元素 P1 和 P2。例如,我们可以得到第一个元素 a[left] 作为 P1,最后一个元素 a[right] 作为 P2。
  3. P1 must be less than P2, otherwise they are swapped. So, there are the following parts:
    • 第 I 部分,索引从 left+1 到 L–1,元素小于 P1,
    • 第二部分,索引从 L 到 K–1,元素大于或等于 P1 且小于或等于 P2,
    • 第三部分,索引从 G+1 到 right–1,元素大于 P2,
    • 第四部分包含其余要检查的元素,索引从 K 到 G。
  4. 第四部分中的下一个元素 a[K] 与两个主元 P1 和 P2 进行比较, 并放置到相应的 I、II 或 III 部分。
  5. 指针L、K和G沿相应方向改变。
  6. 当 K ≤ G 时,重复步骤 4 - 5。
  7. 主元元素 P1 与第 I 部分的最后一个元素交换, 枢轴元素 P2 与第 III 部分中的第一个元素交换。
  8. 对于第 I 部分、第 II 部分和第 III 部分的每个部分,递归地重复步骤 1 - 7。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

双枢轴快速排序和快速排序有什么区别? 的相关文章

  • 如何使用retrofit2动态设置超时?

    public class Router private static Retrofit retrofit null public Retrofit getRetrofit if retrofit null OkHttpClient clie
  • H.323,如何制作一个没有媒体的简单环。该脚本遵循 Q.931 设置,但仍然无法正常工作

    谁能帮我解决这个问题吗 当我发送此请求时 我在wireshark中看到数据包将发送到1720 tcp端口中的SJPhone 但 SJPhone 仍然没有响铃 我想让它响起 无论媒体 我非常感谢您的支持 我一定缺少消息协议细节来实现这个 请给
  • 如何实现具有LinkedHashMap类似功能的ConcurrentHashMap?

    我用过LinkedHashMap with accessOrdertrue 并同时允许最多 500 个条目作为数据的 LRU 缓存 但由于可扩展性问题 我想转向一些线程安全的替代方案 ConcurrentHashMap在这方面似乎不错 但缺
  • Java中的文字赋值[重复]

    这个问题在这里已经有答案了 定义上有什么区别 double example 23 1d or double example 23 1 为什么long float double可以以l f d结尾 之间没有区别double example 2
  • Spring boot 2.0.5.RELEASE和mongo 4.0连接问题

    我正在关注使用 MongoDB 访问数据教程春季网站 https spring io guides gs accessing data mongodb 我将 Mongo DB 服务器版本 4 安装为服务当我使用客户端连接到它时 它的身份验证
  • 如何将抽象工厂与单例模式结合起来? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我正在用 java 编码 并且对这些模式很陌生 谁能给我一个也使用单例的工厂抽象的例子 这是一个实现类的示例单例模式 这个实现也是线程安全
  • EL 通过 Scriptlet

    在 JSP 中使用 EL 相对于 scriptlet 的优势是什么 EL 被认为是无脚本语言 EL 使 JSP 免受容易出错原始 Java 代码并强制您根据 MVC 思想编写 JSP EL 或像 JSTL 这样的标签库 不可能实现的任何事情
  • 全静态方法和应用单例模式有什么区别?

    我正在创建一个数据库来存储有关我的网站用户的信息 我正在使用 stuts2 因此使用 Java EE 技术 对于数据库 我将创建一个 DBManager 我应该在这里应用单例模式还是将其所有方法设为静态 我将使用这个 DBManager 进
  • MediaPlayer.create() 始终返回 null

    我以前用过媒体播放器 从来没有遇到过这个问题 每当我尝试使用 MediaPlayer create 时 该方法都会给我 null 并且我无法播放声音 我有什么遗漏的吗 public class Game extends Activity p
  • Android 游戏偶尔出现延迟

    我正在用 Java 制作一个简单的 Android 游戏 我注意到每 20 40 秒就会出现一些烦人的延迟 首先 我认为它们是由垃圾收集器引起的 但当我检查 LogCat 时 我发现游戏滞后时没有垃圾收集 每当游戏开始滞后时 我都会标记日志
  • 强制 Java 最低版本以“java -version:”运行在 Windows 上不起作用

    我想强制应用程序运行的 JVM 最低版本为 1 6 或更高版本 即 1 6 我的理解是 您可以使用 version 命令行参数来执行此操作 我尝试了一下 在Linux下似乎可以正常工作 但在Windows下却不行 LINUX 我在 Linu
  • 如何在 JdbcTemplate 中创建 mySQL 存储过程

    背景 为了解决 MySql 中某些语句只允许在存储过程中出现的问题 我尝试在 JdbcTemplate 提交的 sql 中创建 运行然后删除存储过程 一个简单的例子是 这恰好是在 Spring Boot 中 Service public c
  • vm 参数中的 -D 是什么,它表示为什么我们必须在 vm 参数中始终指定 -D

    vm 参数中的 D 是什么 它表示为什么我们必须在 vm 参数中始终指定 D 有什么标准吗 如果是 那是什么以及指定的位置 D 设置当前运行的 java 程序可以访问的属性值 它允许程序员设置程序运行所需的值 但程序不知道这些值是什么 因此
  • 如何在 Vim 中对数字和文字列进行排序

    使用 Vim 6 0 假设我正在编辑这个文件 sdfsdg dfgdfg 34 12 2 4 45 1 34 5 如何对第二列进行排序 如果您有合适的 shell 请选择您的号码并运行命令 lt gt sort n k 2 如果您要在视觉模
  • Java字符串查找和替换的最佳方法?

    我正在寻找 Java 中字符串查找和替换的最佳方法 这是一句话 我的名字叫米兰 人们都知道我叫米兰瓦西奇 我想用 Milan Vasic 替换 Milan 弦 但在我已经有 Milan Vasic 的地方 情况不应该是这样 搜索 替换后的结
  • 如何在Java中模拟引用传递?

    我是一个十足的 Java 菜鸟 我知道 Java 将所有参数视为按值传递 并且还有其他几个线程人们对此进行了解释 例如 在 C 中我可以这样做 void makeAThree int n n 3 int main int myInt 4 m
  • 如何在 jQuery 中选择时对 DOM 元素进行排序?

    我的页面上有以下 DIV div Div 3 div div Div 2 div div Div 1 div div Div 6 div div Div 5 div div Div 4 div 我正在尝试使用 jQuery 代码选择 Div
  • while 之后无法访问的语句[重复]

    这个问题在这里已经有答案了 我只是修改代码 在以下代码中出现错误 int x 1 System out println x x while true x System out println x x 错误在最后一行 我可以知道错误 错误 无
  • 如何创建具有同等时间元素的 JavaFX 转换?

    我正在尝试 JavaFX 和动画 尤其是PathTransition 我正在创建一个简单的程序 使球 弹跳 而不使用QuadCurveTo班级 到目前为止 这是我的代码 Ellipse ball new Ellipse 375 250 10
  • 获取Java中ResultSet返回的行数

    我用过一个ResultSet返回一定数量的行 我的代码是这样的 ResultSet res getData if res next System out println No Data Found while res next code t

随机推荐