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;
}