import java.util.Arrays; import java.util.Random; public class StepsTest { private static final int NUMBER_OF_TESTS = 100; private static final int TEST_ARRAY_LENGTH = 50000; public static int[] createRandomSortedArray(int size) { Random random = new Random(); int[] array = new int[size]; for (int i = 0; i < size; i++) { array[i] = random.nextInt(NUMBER_OF_TESTS * TEST_ARRAY_LENGTH); } Arrays.sort(array); return array; } /* pre: array.length >= 1 */ public static long average(long[] array) { long average = array[0]; for (int i = 1; i < array.length; i++) { average = (average * i + array[i]) / (i+1); } return average; } public static int hasDuplicate1Steps(int[] array) { int steps = 0; if (array.length == 1) { return steps; } for (int i = 0; i < array.length; i++) { for (int j = 0; j < array.length; j++) { steps++; if (i != j && array[i] == array[j]) { return steps; } } } return steps; } public static int hasDuplicate2Steps(int[] array) { int steps = 0; for (int i = 0; i < array.length - 1; i++) { steps++; if (array[i] == array[i+1]) { return steps; } } return steps; } public static void main(String[] args) { long[] steps1 = new long[StepsTest.NUMBER_OF_TESTS]; long[] steps2 = new long[StepsTest.NUMBER_OF_TESTS]; for (int i = 0; i < StepsTest.NUMBER_OF_TESTS; i++) { int[] testArray = createRandomSortedArray(StepsTest.TEST_ARRAY_LENGTH); /* Test hasDuplicate1 */ steps1[i] = hasDuplicate1Steps(testArray); /* Test hasDuplicate2 */ steps2[i] = hasDuplicate2Steps(testArray); } System.out.println("hasDuplicate1 average number of steps is " + average(steps1) + " steps."); System.out.println("hasDuplicate2 average number of steps is " + average(steps2) + " steps."); } }