1

I try to time my java program using System.currentTimeMillis();, but I find a really wired phenomenon that the array with 100000 elements takes a longer time than the array with 2000000 elements. I got the following results. I use the Intellij IDEA.

timing : 2ms timing : 2ms timing : 0ms timing : 1ms timing : 2ms 100000 - 1.400000 timing : 3ms timing : 0ms timing : 0ms timing : 0ms timing : 0ms 200000 - 0.600000 timing : 0ms timing : 0ms timing : 1ms timing : 0ms timing : 0ms 500000 - 0.200000 timing : 1ms timing : 0ms timing : 0ms timing : 1ms timing : 0ms 1000000 - 0.400000 timing : 1ms timing : 1ms timing : 0ms timing : 1ms timing : 1ms 2000000 - 0.800000

Here is my code:

public static void main(String[] args) {
    Random generator = new Random();
    final int ITERATIONS = 5;
    int[] N = new int[] {100000, 200000, 500000, 1000000, 2000000};

    for (int n : N) {
        int[] array = new int[n];
        for (int i = 0; i < array.length; i++) {
            array[i] = generator.nextInt();
        }
        int q = generator.nextInt();

        float timing = 0;
        for (int it = 0; it < ITERATIONS; it++) {
            long start = System.currentTimeMillis();
            linearSearch(array, n, q);
            long end = System.currentTimeMillis();
            timing += end - start;
        }
        timing /= (long)(ITERATIONS);
        System.out.format("%d - %f\n", array.length, timing);
    }
}

public static int linearSearch(int[] a, int n, int q) {

    long start = System.currentTimeMillis();
    int index = 0;
    int position = -1;

    while (index < n && a[index] != q) {
        index += 1;
    }

    if (index == n) {

    } else {
        position = index;
    }

    long end = System.currentTimeMillis();
    System.out.println("timing : " + (end - start) + "ms");
    return position;

}
Ryan Chan
  • 11
  • 1

0 Answers0