Skip to content

Commit b8ab753

Browse files
committed
Benchmarked against Arrays.sort
1 parent 8ec608b commit b8ab753

File tree

1 file changed

+78
-1
lines changed

1 file changed

+78
-1
lines changed

src/main/java/com/github/coderodde/util/Benchmark.java

Lines changed: 78 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ public class Benchmark {
88
private static final int WARMUP_INT_ARRAY_LENGTH = 100_000;
99
private static final int WARMUP_INT_UPPER_BOUND = 1_000;
1010
private static final int RANDOM_DATA_LENGTH = 1_000_000;
11+
private static final int SPARSE_DATA_LENGTH = 10_000_000;
12+
private static final int SPARSE_DATA_UPPER_BOUND = 100;
1113
private static final int DEGENERATE_DATA_LENGTH = 2 << 14;
1214

1315
public static void main(String[] args) {
@@ -26,16 +28,25 @@ public static void main(String[] args) {
2628
System.out.println("Benchmarking on random data:");
2729

2830
benchmarkOnRandomIntData(random);
31+
32+
System.out.println("Benchmarking on degenerate data:");
33+
2934
benchmarkOnDegenerateData(random);
35+
36+
System.out.println("Benchmarking on sparse data:");
37+
38+
benchmarkOnSparseData(random);
3039
}
3140

3241
private static void warmup(final Random random) {
3342
final int[] array1 = getWarmupArray(random);
3443
final int[] array2 = array1.clone();
3544
final int[] array3 = array1.clone();
45+
final int[] array4 = array1.clone();
3646

3747
IntTreeSortV1.sort(array1);
3848
IntTreeSortV2.sort(array2);
49+
Arrays.sort(array4);
3950

4051
System.out.println();
4152
}
@@ -64,6 +75,7 @@ private static int[] getRandomIntArray(final Random random) {
6475
private static void benchmarkOnRandomIntData(final Random random) {
6576
final int[] array1 = getRandomIntArray(random);
6677
final int[] array2 = array1.clone();
78+
final int[] array4 = array1.clone();
6779

6880
long startTime = System.currentTimeMillis();
6981

@@ -83,11 +95,22 @@ private static void benchmarkOnRandomIntData(final Random random) {
8395
System.out.printf("V2: %d milliseconds.\n",
8496
endTime - startTime);
8597

98+
startTime = System.currentTimeMillis();
99+
100+
Arrays.sort(array4);
101+
102+
endTime = System.currentTimeMillis();
103+
104+
System.out.printf("Arrays.sort: %d milliseconds.\n",
105+
endTime - startTime);
106+
86107
System.out.printf("Algorithms agree: %b.\n",
87-
Arrays.equals(array1, array2));
108+
Arrays.equals(array1, array2) &&
109+
Arrays.equals(array1, array4));
88110

89111
System.out.printf("V1 sorted: %b.\n", isSorted(array1));
90112
System.out.printf("V2 sorted: %b.\n", isSorted(array2));
113+
System.out.printf("Arrays.sort sorted: %b.\n", isSorted(array4));
91114

92115
System.out.println();
93116
}
@@ -134,6 +157,49 @@ private static void benchmarkOnDegenerateData(final Random random) {
134157
System.out.println();
135158
}
136159

160+
private static void benchmarkOnSparseData(final Random random) {
161+
final int[] array1 = getSparseData(random);
162+
final int[] array2 = array1.clone();
163+
final int[] array4 = array1.clone();
164+
165+
long startTime = System.currentTimeMillis();
166+
167+
IntTreeSortV1.sort(array1);
168+
169+
long endTime = System.currentTimeMillis();
170+
171+
System.out.printf("V1: %d milliseconds.\n",
172+
endTime - startTime);
173+
174+
startTime = System.currentTimeMillis();
175+
176+
IntTreeSortV2.sort(array2);
177+
178+
endTime = System.currentTimeMillis();
179+
180+
System.out.printf("V2: %d milliseconds.\n",
181+
endTime - startTime);
182+
183+
startTime = System.currentTimeMillis();
184+
185+
Arrays.sort(array4);
186+
187+
endTime = System.currentTimeMillis();
188+
189+
System.out.printf("Arrays.sort: %d milliseconds.\n",
190+
endTime - startTime);
191+
192+
System.out.printf("Algorithms agree: %b.\n",
193+
Arrays.equals(array1, array2) &&
194+
Arrays.equals(array1, array4));
195+
196+
System.out.printf("V1 sorted: %b.\n", isSorted(array1));
197+
System.out.printf("V2 sorted: %b.\n", isSorted(array2));
198+
System.out.printf("Arrays.sort sorted: %b.\n", isSorted(array4));
199+
200+
System.out.println();
201+
}
202+
137203
private static int[] getDegenerateData(final Random random) {
138204

139205
final int[] array = new int[DEGENERATE_DATA_LENGTH];
@@ -145,4 +211,15 @@ private static int[] getDegenerateData(final Random random) {
145211

146212
return array;
147213
}
214+
215+
private static int[] getSparseData(final Random random) {
216+
217+
final int[] array = new int[SPARSE_DATA_LENGTH];
218+
219+
for (int i = 0; i < array.length; i++) {
220+
array[i] = random.nextInt(SPARSE_DATA_UPPER_BOUND);
221+
}
222+
223+
return array;
224+
}
148225
}

0 commit comments

Comments
 (0)