【问题标题】:Calculate the running time of merge sort计算归并排序的运行时间
【发布时间】:2021-03-22 04:13:59
【问题描述】:

当你想计算归并排序的运行时间时,将startTime放在调用mergeSort函数之前或调用之后是正确的:

    startTime=System.nanoTime();
    mergeSort(temp,0,temp.length - 1);
    endTime=System.nanoTime();
    running-time=(endTime-startTime);

    mergeSort(temp,0,temp.length - 1);
    startTime=System.nanoTime();
    endTime=System.nanoTime();
    duration=(endTime-startTime);

哪个是正确的,因为结果不同?

【问题讨论】:

  • 第一个是正确的,第二个与mergeSort的时间无关
  • 开始时间和结束时间之间的差异仅说明在两次调用 nanoTime() 之间发生的程序操作。

标签: java arrays algorithm sorting mergesort


【解决方案1】:

第一个是正确的,因为它获取操作之前的时间(合并排序),执行操作,然后获取操作之后的时间,使用这两个时间来计算所用时间。

第二个是不正确的,因为它执行操作,然后用时间计算,它计算的时间与运行归并排序算法的时间无关。

注意:变量running-time 无效。考虑将其更改为 runningTime,或者最坏的情况是 running_time

【讨论】:

  • “它只是计算调用System.nanoTime(); 两次并将其分配给两个变量所需的时间。”:这不太准确。
  • @trincot 是真的,实际上。我会相应地编辑它。
  • 好的,您删除了关于第二个代码所做 测量的任何声明。你知道它测量的是什么吗?
  • @tincot 我不能假装是 JVM 专家,但这可能只是两次调用之间的时间(因为在此期间 CPU 可能会从 Java 进程切换到做其他事情)时间)
猜你喜欢
  • 2012-12-12
  • 2020-10-09
  • 1970-01-01
  • 2016-10-02
  • 2016-07-22
  • 2016-09-02
  • 2020-09-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多