排序时间总是与第一次排序不同

2023-12-02

我写了情侣排序算法。我想比较他们的排序时间,至少是差不多。但在第一次循环之后,除了 StoogeSort 之外,所有排序时间都减少了。我认为可以在后台进行一些优化,但我应该考虑哪种措施?第一个还是其他?为什么会发生这种情况?

    public static void main(String[] args) {
    RandomNumber rn = new RandomNumber();

    Scanner sc = new Scanner(System.in);
    while(true){
        System.out.println("Enter the input size.");
        int n = sc.nextInt();
        int[] experimentalArray = rn.experimentalArrayGenerator(n);



        Stopwatch sw1 = new Stopwatch();
        StoogeSort ss = new StoogeSort(experimentalArray.clone());
        System.out.println("StoogeSort : " + sw1.elapsedTime() + " µs");

        Stopwatch sw2 = new Stopwatch();
        RadixSort rs = new RadixSort(experimentalArray.clone());
        System.out.println("RadixSort : " + sw2.elapsedTime() + " µs");

        Stopwatch sw3 = new Stopwatch();
        ShakerSort shs = new ShakerSort(experimentalArray.clone());
        System.out.println("ShakerSort : " + sw3.elapsedTime() + " µs");

        Stopwatch sw4 = new Stopwatch();
        MaximumSubarray ms = new MaximumSubarray();
        int a = ms.maxSubArraySum(experimentalArray.clone());
        System.out.println("MaximumSubarray : " + sw4.elapsedTime() + " µs");
        System.out.println("------------------------------------------------------");
    }
}

4次循环后的输出:

enter image description here


微基准测试是一个复杂的问题,因为许多因素都会影响执行时间(例如 Jon Skeet 在评论中指出的即时编译和垃圾收集)。

你应该阅读这个文件如果您想了解应该如何进行微基准测试,作者是 Peter Sestoft。

此处引用文档的摘要,因为该文档是外部资源:

有时人们想要测量软件的速度,例如 衡量解决问题的新方法是否比旧方法更快 一。进行此类时间测量和微基准测试需要 相当小心,尤其是在 Java 等托管平台上 虚拟机和微软的公共语言基础设施(.NET), 否则结果可能是任意的和具有误导性的。

这里我们给一些 关于运行微基准测试的建议,特别是对于托管 平台。大多数示例都是用 Java 编写的,但建议适用于任何 在托管平台上执行的语言,包括 Scala、C# 和 F#。 该版本使用Java函数式接口,需要Java 8。

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

排序时间总是与第一次排序不同 的相关文章

随机推荐

  • 在 WPF 中为窗口创建抽象基类

    常见的WPF架构 public partial class MainWindow Window InitializeComponent XAML
  • y 轴位于中间的多面 ggplot

    假设我有两个并排的图 具有相同的 y 轴 由以下 R 代码生成 df lt data frame x c 5 2 7 3 y c 11 3 5 6 facet c 1 1 2 2 ggplot df aes x y facet grid f
  • 动态添加控件到 ASP.NET - 20 分钟后不保留视图状态

    我们有一个动态加载控件的 ASP net 表单 IIS 6 上的 NET 3 5 我们能够保留视图状态中的值只要回发发生在 20 分钟内 数据库也得到正确更新 一切都按预期进行 但是 如果用户填写表单的时间超过 20 分钟 则控件在回发期间
  • Beautiful Soup 对现有元素返回 None

    我正在努力降低产品的价格 这是我的代码 from bs4 import BeautifulSoup as soup import requests page url https www falabella com falabella cl
  • 在“我的设置”中添加名称

    如何在 My Settings 中添加新名称 到目前为止 我已经学会了如何读取和编辑其中的值 但是如何在运行时添加另一行 名称 就像是 My Settings AddName String foo1 My Settings Save My
  • 如何将音频字节转换为样本

    这是我的结构 wave data block header typedef struct wavehdr tag LPSTR lpData pointer to locked data buffer DWORD dwBufferLength
  • 在flutter中如何从firebase维护的缓存中获取当前用户登录的电子邮件和密码的登录类型

    我可以在身份验证中使用用户登录 但如何在 dart flutter 中获取当前用户帮助 我正在以这种方式尝试 FirebaseUser user FirebaseAuth instance currentUser print user ui
  • 为什么我用 Perl 编写的图像下载 CGI 脚本不起作用?

    usr bin perl use CGI standard use CGI Carp qw fatalsToBrowser my files location my ID my fileholder files location C Use
  • 如何设置剪贴板复制文件?

    在我的应用程序中 我允许用户选择与磁盘上的文件相对应的项目 当用户按 Ctrl C 时 我希望将文件发送到剪贴板 然后用户可以将文件粘贴到其他位置 我想以某种方式实现它 以便用户可以复制 但不能粘贴到我的应用程序中 然后 用户可以自由地将文
  • 将 Windows 应用商店应用程序中的画布保存为图像文件

    我正在寻找从 Windows 商店应用程序保存画布的方法 我发现 private void CreateSaveBitmap Canvas canvas string filename RenderTargetBitmap renderBi
  • 使用 CreateFileMapping 时出错 - C

    我正在使用教程这个 MSDN 链接实现一种将数据从一个进程传输到另一个进程的方法 尽管有人建议我先前的问题要使用 Pipe 方法 由于某些限制 我别无选择 只能使用 CreateFileMapping 方法 现在 我已经成功地在同一解决方案
  • 使用Python 3快速计算实大整数的以3为底的值

    我们有一个很大的数字 例如 10 1500000 1 并且想要将其转换为基数 3 下面是我们在普通 Python 中找到的最快方式运行代码 不使用 numpy 或 CAS 库 如何加速基数转换 到基数 3 的性能 我们想知道如何通过以下两种
  • 当 xml 标签名称包含大写字母时,BeautifulSoup 引发 AttributeError

    我正在尝试获取该标签的所有 XML 属性Name 出现此错误 AttributeError NoneType object has no attribute attrs 当我执行以下代码时 import BeautifulSoup as b
  • 如何在序言中打印所有数据库事实

    我在序言中有一个数据库 我想做的就是枚举它的元素并一一打印 如何才能做到这一点 fact is mike asthmatic fact has andy highPressure fact is mike smoker 我已经写了这个 它工
  • Android Instant 应用程序无法通过应用程序链接在我的 Beta 预发布测试中运行

    我的即时应用程序处于 Beta 预发行版 但我无法通过应用程序链接启动即时应用程序 相反 它会将我带到网络浏览器 有什么帮助吗 我自己也一直有同样的问题 我的解决方案是转到您的即时应用程序设置并关闭即时应用程序然后再次打开 您应该可以通过
  • c++:类的通用 getter

    我有点需要帮助 我想为我的类定义一个模板方法来访问其私有字段 这是我的代码 include
  • NSWindow 纹理背景与 NStextField

    我有一个超级奇怪的问题 我想要一个纹理窗口具有正常的渐变颜色 我在这个窗口中有一个 NSTextField 该文本字段注定是一个 URL 输入字段 因此它需要很大 问题是 当它太大 大约超过窗口宽度的 1 3 时 它只是切换纹理窗口以绘制渐
  • 无法使用.bss段内存

    我正在尝试在 bss 内存中存储一 个文件描述符 用于从一个文件读取并写入另一个文件的基本 Linux 程序 我一直无法让它发挥作用 该程序不会返回错误 但无法正常工作 将文件描述符存储在堆栈上时它可以正常工作 当我尝试在 gdb 中运行该
  • 如何使用boost序列化进行二进制输出?

    函数 boost serialization binary object void t size t size 和 boost serialization make binary object void t size t size 之间有什
  • 排序时间总是与第一次排序不同

    我写了情侣排序算法 我想比较他们的排序时间 至少是差不多 但在第一次循环之后 除了 StoogeSort 之外 所有排序时间都减少了 我认为可以在后台进行一些优化 但我应该考虑哪种措施 第一个还是其他 为什么会发生这种情况 public s