// Copyright (c) 1996, 1997, 1998 Bruno R. Preiss, P.Eng. // $Author: brpreiss $ // $Date: 1998/12/14 02:52:01 $ // $RCSfile: Demo9.java,v $ // $Revision: 3.5 $ package Opus5; import java.util.*; /** * Demonstration program that tests the following classes: * StraightInsertionSorter, * BinaryInsertionSorter, * StraightSelectionSorter, * BubbleSorter, * HeapSorter, * MedianOfThreeQuickSorter, * TwoWayMergeSorter, * BucketSorter, and * RadixSorter. * @see StraightInsertionSorter * @see BinaryInsertionSorter * @see StraightSelectionSorter * @see BubbleSorter * @see HeapSorter * @see MedianOfThreeQuickSorter * @see TwoWayMergeSorter * @see BucketSorter * @see RadixSorter * @author Bruno R. Preiss, P.Eng. * @version $Id: Demo9.java,v 3.5 1998/12/14 02:52:01 brpreiss Exp $ **/ public class Demo9 { //[ final String copyright = "@(#) Copyright (c) 1998 by Bruno R. Preiss, P.Eng."; //] /** * Performs various test on the specified sorter. * @param sorter The sorter to be tested. * @param n The length of array to sort. * @param seed The initial seed for the random number generator. * @param m The value of the largest integer to be sorted. * If m is zero, the largest integer defaults to 2147483647. **/ private static void testSorter (Sorter sorter, int n, int seed, int m) { RandomNumberGenerator.setSeed (seed); Int[] test = new Int [n]; for (int i = 0; i < n; ++i) { int datum = (int) (2147483647 * RandomNumberGenerator.nextDouble ()); if (m != 0) datum %= m; test [i] = new Int (datum); } long startTime = System.currentTimeMillis (); sorter.sort (test); long stopTime = System.currentTimeMillis (); double elapsedTime = (stopTime - startTime) / 1000.; Terminal.out.println (sorter.getClass ().getName () + " " + n + " " + seed + " " + elapsedTime); for (int i = 1; i < n; ++i) if (test [i].isLT (test [i - 1])) { Terminal.out.println ("FAILED"); break; } } /** * Performs various test on the specified sorter. * @param sorter The sorter to be tested. * @param n The length of array to sort. * @param seed The initial seed for the random number generator. **/ private static void testSorter (Sorter sorter, int n, int seed) { testSorter (sorter, n, seed, 0); } /** * The (static) main program. * Invokes various test routines. * @param args The command-line arguments. Ignored. **/ public static void main (String[] args) { if (args.length != 3) { Terminal.err.println ("usage: java Opus5.Demos.Demo9 size seed mask"); return; } int n = Integer.parseInt (args [0]); int seed = Integer.parseInt (args [1]); int mask = Integer.parseInt (args [2]); if ((mask & 04) != 0) { testSorter (new StraightInsertionSorter (), n, seed); testSorter (new BinaryInsertionSorter (), n, seed); testSorter (new BubbleSorter (), n, seed); testSorter (new StraightSelectionSorter (), n, seed); } if ((mask & 02) != 0) { testSorter (new MedianOfThreeQuickSorter (), n, seed); testSorter (new HeapSorter (), n, seed); testSorter (new TwoWayMergeSorter (), n, seed); } if ((mask & 01) != 0) { testSorter (new BucketSorter (1024), n, seed, 1024); testSorter (new RadixSorter (), n, seed); } } }