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