雅罗斯拉夫斯基的双主元快速排序算法

2024-04-08

我正在研究我发现的双枢轴快速排序here http://aofa2013.lsi.upc.edu/slides/Nebel.pdf(幻灯片第 20 页)

比较:

雅罗斯拉夫斯基平均需求 = 1.9 n ln n。

经典快速排序需要 = 2 n ln n 比较!

Swaps:

Yaroslavskiy 算法的交换 = 0.6 n ln n

经典快速排序的交换=0.3 n ln n

Results

数据类型-----comp--------swap

整数-------------591ns---------802ns

浮动-----------838ns----------873ns

双倍 ------873ns----------1047ns

字符----------593ns------------837ns

/* 注意:- 以上结果以纳秒为单位,并使用 intel core 2 duo 在 java lang 中执行 */

如果我们结合交换和比较的成本,经典快速排序会击败雅罗斯拉夫斯基快速排序 除非在字符串情况下,我们使用指针数组进行交换,这需要 88 纳秒。这里 Yaroslavskiy 的算法利用 1.9 n ln n 比较,因为与字符串情况下的交换相比,比较成本太高。

我想知道为什么java使用Yaroslavskiy Quicksort?内置库排序的主要焦点是字符串,如果它对其他数据类型不好怎么办?


我不知道你从哪里得到你的号码。根据这一页 http://permalink.gmane.org/gmane.comp.java.openjdk.core-libs.devel/2628:

事实证明,对于双枢轴快速排序,平均数量 比较是2*n*ln(n),平均交换次数为0.8*n*ln(n), 而经典的快速排序算法有2*n*ln(n) and 1*n*ln(n)分别。

看起来双轴总是更好。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

雅罗斯拉夫斯基的双主元快速排序算法 的相关文章

随机推荐

  • 通过关联属于_to

    鉴于以下关联 我需要参考Question that a Choice是通过从Choice模型 我一直在尝试使用belongs to question through answer来执行此操作 class User has many ques
  • 在 Django 中出现无效图像错误,但 PIL 已安装并通过所有测试

    所以我终于在RHEL5上成功安装了PIL 经历了很多困难 Django 开发版本 和Python 2 6安装在 opt python2 6 运行 selftest py 显示一切似乎都已正确安装 python2 6 selftest py
  • 如何在 Nodejs 中实际运行 scalajs 代码?

    我正在开发一个后端聊天服务器 它目前是用混乱的回调 javascript 编写的 所以我正在考虑将其移植到 scalajs 我一直在浏览初学者指南 但我找不到如何将项目实际编译为可以使用节点运行的单个 JavaScript 文件 例如nod
  • pd.merge_asof() 基于时差不合并所有值 - Pandas

    我有两个数据框 一个包含新闻 另一个包含股票价格 两个数据框都有一个 日期 列 我想以 5 天的间隔合并它们 假设我的新闻数据帧是 df1 另一个价格数据帧是 df2 我的 df1 看起来像这样 News Dates News 2018 0
  • 将 tmux.conf 拆分为多个文件?

    我有一个在计算机之间共享的通用 tmux 设置文件 tmux conf common 我希望能够在我的 tmux conf 中获取此文件 在 bash 中实现此目的的一种方法是让每台计算机的 bashrc 获取公共文件 有没有办法在 tmu
  • unique_ptr自定义存储类型示例?

    霍华德 希南特 解释了 http home roadrunner com hinnant unique ptr03 html that unique ptr还可以使用自定义存储类型 他举了一个例子 共享内存 他只给出了粗略的想法 这对于快速
  • 使用 Eclipse 创建 java 可执行文件

    这完全是一个新手问题 我在 Ubuntu 上运行 Eclipse 我创建了一个测试项目 我想将其编译为可执行文件 Linux 相当于 Windows exe 文件 这是我的程序的内容 public class MyTest public s
  • 具有保序功能的哈希函数

    是否有任何带有uniq哈希码 如MD5 且保序的哈希函数 笔记 我不关心安全性 我需要它来排序 我有很多块 约1MB大小 我想对它们进行排序 当然我可以使用索引排序 但我想减少比较时间 理论上 如果我有 1 000 000 个 1MB 大小
  • Google 地图 7 从地理意图开始,将图钉放置在距离坐标最近的地址而不是确切位置

    在我的应用程序中 用户可以保存特定位置的纬度和经度 我希望他们能够通过以下方式在手机上启动其他应用程序地理意图 https datatracker ietf org doc html draft mayrhofer geo uri 00 s
  • AngularJS 多指令资源争用

    我正在尝试用角度构建指令 这里是plunker http plnkr co edit KbccCT p preview 我想把它分成 3 个指令 最高的祖父母指令 许多DAYS 中间 用 ng repeat 创建 一DAY 底部 使用 ng
  • 2013 年更新了 D 的 GUI 库?

    我正在用 D 开发一个游戏 到目前为止 我真的很欣赏 D 语言 并且对于大多数库都有很好的绑定 现在 对于编辑器 我正在寻找一个便携式 GUI 库 wxD 或 DWT 似乎是不错的选择 但它们似乎被放弃了 因为最新的更新是几年前的 论坛上也
  • 模板类成员函数的显式特化

    我有这个 template
  • 使用 ember-cli-mirage 测试错误响应

    我正在阅读 ember cli mirage 关于创建模拟响应的文档 但无法弄清楚如何测试完全相同的请求的错误响应 例如 test I can view the users function var users server createL
  • FirebaseUI Auth - Facebook 登录错误:来自 Facebook 的 debug_token 响应失败

    我正在尝试集成 FirebaseUI Auth 库 Google 登录和电子邮件登录工作正常 但我在设置 Facebook 登录时遇到问题 这是我的代码 user firebaseAuth getCurrentUser if user nu
  • 跟踪 vb.net 中函数调用的持续时间

    在我们的 VB6 应用程序中 我们添加了一些实用函数来跟踪函数所花费的时间 我们这样做是为了跟踪性能瓶颈 基本上 它的工作原理是有两个实用函数 StartTickCount 和 EndTickCount 您将在每个函数中传递函数名称 函数将
  • 如何让我的 PUT_LINE 语句显示在 TOAD 中?

    此代码可以编译 但在 TOAD 中不会显示 hi wo 输出 CREATE OR REPLACE PROCEDURE AdelTest IS tmpVar NUMBER BEGIN DBMS OUTPUT ENABLE 100 in INT
  • 单击链接后,javascript何时停止在页面上运行?

    我有一个运行各种 javascript 代码的页面 包括调用setTimeout 如果用户单击链接导航到另一个页面 该页面上的 javascript 在什么时候停止运行 因此我的 setTimeout 调用的代码将不再被调用 例如 单击链接
  • 我如何使用 Android EffectFactory 类?

    我厌倦了开发带有图像处理的示例应用程序 在我的应用程序中我需要添加一些color effects Grayscale sepia 在我的位图上 我参考了开发人员文档Doc 1 http developer android com refer
  • react-native\react.gradle' 不存在

    我使用 React Native 创建了一个应用程序 并且正在尝试生成 apk 完成文档中的所有操作后http facebook github io react native docs signed apk android html con
  • 雅罗斯拉夫斯基的双主元快速排序算法

    我正在研究我发现的双枢轴快速排序here http aofa2013 lsi upc edu slides Nebel pdf 幻灯片第 20 页 比较 雅罗斯拉夫斯基平均需求 1 9 n ln n 经典快速排序需要 2 n ln n 比较