@@ -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