打印已排序和未排序的数组时的时间差

时间:2017-03-07 13:31:02

标签: java arrays sorting

我创建了一个包含两个整数数组的示例类;一个排序和其他未排序。我正在打印数组的内容。打印排序数组所花费的时间是打印未排序数组所需时间的两倍。

参考代码:

public class Demo {

public static void main(String[] args) {

    int[] array1 = {1,2,3,4,5,6,7,8,9,10};
    int[] array2 = {10,3,4,2,6,7,8,1,5,9};

    long start = System.nanoTime();

    for(int a:array1){
        System.out.println(a);
    }

    System.out.println("Time required by sorted array\t"+(System.nanoTime() - start) / 1000000000.0);

    start = System.nanoTime();
    for(int a:array2){
        System.out.println(a);
    }

    System.out.println("Time required by unsorted array\t"+(System.nanoTime() - start) / 1000000000.0);
}

}

输出:

1
2
3
4
5
6
7
8
9
10
Time required by sorted array   3.89505E-4
10
3
4
2
6
7
8
1
5
9
Time required by unsorted array 1.37727E-4

为什么显示数字时会有时间差异。另外我读了一个更快排序数组过程的地方,这里情况有所不同。

1 个答案:

答案 0 :(得分:4)

根本不是你如何对代码进行基准测试。多运行一次你的代码,你会发现每次都会得到一个非常不同的结果。例如,以下是我的机器上几次运行的结果:

Time required by sorted array   4.53115E-4
Time required by unsorted array 2.0451E-4

Time required by sorted array   3.2349E-4
Time required by unsorted array 2.10212E-4

Time required by sorted array   3.48198E-4
Time required by unsorted array 1.90065E-4

如果我颠倒了打印循环的顺序,请执行以下操作:

long start = System.nanoTime();

for(int a:array2){
    System.out.println(a);
}

System.out.println("Time required by unsorted array\t"+(System.nanoTime() - start) / 1000000000.0);

start = System.nanoTime();
for(int a:array1){
    System.out.println(a);
}

System.out.println("Time required by sorted array\t"+(System.nanoTime() - start) / 1000000000.0);

结果也发生了变化:

Time required by unsorted array 3.04103E-4
Time required by sorted array   2.23136E-4

Time required by unsorted array 3.55041E-4
Time required by sorted array   1.99188E-4

Time required by unsorted array 3.63783E-4
Time required by sorted array   2.0489E-4

因此,时间差与数组是否已排序无关,而更多地与首先对哪个数组进行排序有关。

正确的代码基准测试,特别是在Java中是很棘手的。整个tools(以及更多tools)和methodologies致力于做到这一点。