Java:计算对数组进行排序的时间

Box*_*iom 0 java arrays sorting timer

我有一些代码在数组中生成1000个数字然后对它们进行排序:

import java.util.Arrays;
import java.util.Random;


public class OppgA {
    public static void main(String[] args) {
        int[] anArray;
        anArray = new int[1000];
        Random generator = new Random();
        for(int i=0; i<1000; i++){
            anArray[i] = (generator.nextInt(1000)+1);
        }
        Arrays.sort(anArray);
        System.out.println(Arrays.toString(anArray));

    }

}
Run Code Online (Sandbox Code Playgroud)

现在我被要求计算并打印排序数组所花费的时间.我有什么线索可以做到这一点?我真的找不到太多可以帮助我解决的问题.

谢谢!

ass*_*ias 8

您可以在调用System.nanoTime()之前和之后调用(并存储结果)Arrays.sort()- 差异是以纳秒为单位的时间.该方法优于System.currentTimeMillis计算持续时间.

long start = System.nanoTime();
Arrays.sort(anArray);
long end = System.nanoTime();
long timeInMillis = TimeUnit.MILLISECONDS.convert(end - start, TimeUnit.NANOSECONDS);
System.out.println("Time spend in ms: " + timeInMillis);
Run Code Online (Sandbox Code Playgroud)

但请注意,如果多次运行程序,测量结果可能会有很大差异.为了获得更精确的计算,将涉及更多 - 例如:请参阅:如何在Java中编写正确的微基准测试?.


Jj *_*beo 5

在排序之前,声明一个 long ,它对应于开始排序之前的时间:

long timeStarted = System.currentTimeMillis();
//your sorting here.

//after sorting
System.out.println("Sorting last for:" + (System.currentTimeMillis() - timeStarted)); 
Run Code Online (Sandbox Code Playgroud)

结果将返回相当于排序的毫秒数。

System.nanoTime()正如 assylias 评论的那样,如果您喜欢精确测量经过的时间,您也可以使用。

  • System.nanotime 优于 System.currentTimeMillis 来计算持续时间... (4认同)